メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
basic-library:idiorm:1.5ORマッパー - Idiorm
Version 1.5 (BSD License/2-clause)
— y2sunlight 2020-03-11
関連記事
- ORマッパー - Idiorm
サイト
- https://github.com/j4mie/idiorm — idiorm の本家
- https://idiorm.readthedocs.io/en/latest/ — idiorm の公式ドキュメント(英語)
- https://qiita.com/naga3/items/87fef230ac86aeec1eea — idiorm の概要は分かります
テストプログラムの所在
{Project Folder}\test\
idiormについて
作者の言葉を借りるなら “You might think of Idiorm as a micro-ORM. (idiormはマイクロORMと考えると良いでしょう)“との事。本当に軽量なORマッパーです。選定に当たっては、Laravel5で使われているEloquentとどちらにするかで迷いましたが、兎に角シンプルだったので、idiormの方を選びました。また、ドキュメントもよく完備されており学習コストも少なそうだったのも決め手の一つになりました。
作者によれば、Idiormはバージョン1.5.0の時点(2914-06-22)で機能面では完成し、その後はバグの修正による保守のみになるそうです。その意味でidiormは既に(良い意味で)枯れているORMと言えるでしょう。軽量なORMについては、今度も他の動向に注視する必要がありますが、現時点ではidiormをお薦めしたいと思います。
インストール
composer require j4mie/idiorm
Using version ^1.5 for j4mie/idiorm ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing j4mie/idiorm (v1.5.6): Downloading (100%) Writing lock file Generating autoload files 1 package you are using is looking for funding. Use the `composer fund` command to find out more!
Note:
Eclipse起動中にパッケージを取得した場合は、プロジェクト・エクスプローラー内の[プロジェクト(apricote)]を右クリックして[リフレッシュ]を選択して下さい。また、新しく取得したパッケージのインテリセンスが有効にならない場合は、プロジェクトのビルトまたはクリーン&ビルドを行ってビルドリストの更新を行って下さい。パッケージの取得が終わると
composer.json
のrequire
に以下が追加されます。- composer.json
{ "require": { "j4mie/idiorm": "^1.5" } }
テストプログラム
このテストプログラムは、最初に実行した時に、SQLiteのデータベースファイル(test\var\db\sample.sqlite)を作成し、次のSQL文を実行してテスト用のテーブルを自動的に作ります。
CREATE TABLE IF NOT EXISTS USER( id INTEGER PRIMARY KEY autoincrement, email text, name text, created_at text ); INSERT INTO USER VALUES(1,'y2sunlight@sample.com','y2sunlight', datetime('now'));
テスト用のコード(idiorm.php)を以下に示します。
- idiorm.php
<?php require __DIR__.'/../vendor/autoload.php'; // データベースファイルの準備 $db_file = __DIR__.'/var/db/sample.sqlite'; if (!file_exists($db_path=dirname($db_file))) { mkdir($db_path,null,true); } // データベース接続 ORM::configure("sqlite:{$db_file}"); // PDOインスタンスを取得し、Raw-SQLでDDL文を実行する(テーブル作成) $db = ORM::get_db(); $db->exec(" CREATE TABLE IF NOT EXISTS user( id integer primary key autoincrement, email text, name text, created_at text );" ); // テーブルが空の時、テスト用のデータを作る $user = ORM::for_table('user')->find_one(); if ($user===false) { // ORMインスタンスを使ってデータをInsert // (上の Create Tableと同様にPDOインスタンスによるRaw-SQLでも実装可) $user = ORM::for_table('user')->create(); $user->email = 'y2sunlight@sample.com'; // オブジェクト風にセット $user->set('name','y2sunlight'); // (key,value)でセット $user->set_expr('created_at', "datetime('now')"); // 式のセット $user->save(); } // クエリの実行 // find_many()はORMオブジェクトを返すが、連想配列取得したい場合はfind_array()を使う // また、>raw_query()を使えば、複雑なSQLを直接書くこともできる $users = ORM::for_table('user') ->where_like('name', '%sun%') ->order_by_asc('name') ->find_many(); // 結果出力 header('Content-Type: text/html; charset=UTF-8'); ?> <!DOCTYPE html> <html> <head> <title>Idirom</title> </head> <body> <table> <tr> <th>id</th><th>email</th><th>name</th><th>created_at</th> </tr> <?php foreach ($users as $user){ ?> <tr> <td><?php echo $user->id ?></td> <td><?php echo $user->email ?></td> <td><?php echo $user->name ?></td> <td><?php echo $user->created_at ?></td> </tr> <?php } ?> </table> </body> </html>
上の例は、データベースにSQLiteを使用していますが、MySQL(MariaDB)を使用する場合のconfigure()は以下のようになります。
ORM::configure(array( 'connection_string' => 'mysql:host=localhost;dbname=sunlight_db', 'username' => 'sunlight', 'password' => 'password', 'caching' => true, // Default(false) 'logging' => true, // Default(false) 'logger' => function($log_string, $query_time) { // クエリーログ出力 }, ));
実行結果
id email name created_at 1 y2sunlight@sample.com y2sunlight 2020-03-20 13:35:09
basic-library/idiorm/1.5.txt · 最終更新: 2020/04/18 10:51 by y2sunlight
コメント