====== ORマッパー - Idiorm ======
Version 1.5 ([[https://en.wikipedia.org/wiki/BSD_licenses|BSD License/2-clause]])
--- //[[http://www.y2sunlight.com|y2sunlight]] 2020-03-11//
[[basic-library:top|定番ライブラリー に戻る]]
関連記事
* [[basic-library:project|プロジェクトの作成 - Apricot (α版)]]
* [[basic-library:phpdotenv:4.1|環境変数 - phpdotenv]]
* [[basic-library:monolog:2.0|ログ出力 - monolog]]
* ORマッパー - Idiorm
* [[basic-library:bladeone:3.37|テンプレートエンジン - BladeOne]]
* [[basic-library:fast-route:1.3|リクエストルーター - FastRoute]]
* [[basic-library:league-container:3.3|DIコンテナー - League/Container]]
* [[basic-library:valitron:1.4|バリデーター - Valitron]]
* [[basic-library:whoops:2.7|エラーハンドラー - Whoops]]
* [[basic-library:php-debugbar:1.16|デバッグ出力 - php-debugbar]]
サイト
* 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で使われている[[https://github.com/illuminate/database|Eloquent]]とどちらにするかで迷いましたが、兎に角シンプルだったので、idiormの方を選びました。また、[[https://idiorm.readthedocs.io/en/latest/|ドキュメント]]もよく完備されており学習コストも少なそうだったのも決め手の一つになりました。
作者によれば、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'' に以下が追加されます。
{
"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)を以下に示します。
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');
?>
Idirom
id | email | name | created_at |
id ?> |
email ?> |
name ?> |
created_at ?> |
上の例は、データベースに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