WEB業界で働く人や興味がある人に役立つ情報サイト“qam(カム)”

gucchi

2014/05/13

PHPのO/Rマッパー【idiorm】

投稿者: gucchi
カテゴリー: プログラム >PHP

今回はPHPのO/Rマッパーである、idiormを試してみました。

ちなみにO/Rマッパーってなに?という人のために簡単に説明するとプログラミング言語からデータベースを使いやすくするためのお助けツールのようなものです。

私はこれまで、O/Rマッパーは使わずに、自作のライブラリを使って素のSQLを書くようにしていました。フレームワークにしてもCakePHPなどの有名なものは使わずに、プリミティブなPHPで書くようにしています。

理由としては一度書いたコードをなるべく多くの環境で安全に使い回したいからです。

ブラックボックスな個所が増えてしまうと環境の差異による不具合に対処するのは大変です。どんな環境でも自分でコントロールできるようにしておく事はプロジェクトを炎上させないための大切な要素だと思います。

しかし今のやり方ではSQL部分のプログラミングは正直面倒だなと感じていました。画面項目が多い場合なんかは記述ミスも増えるのでなるべく人の手で項目名を書かない方がメリットは多いです。

なので以前から軽量であまり環境に依然せずに使えるPHPのO/Rマッパーがあればいいのになと思っていましたが、なかなか要件に合うものがありませんでした。
今回偶然見付けたidiormはまだまだ使い込んでいませんが、どんな感じで使えるのかだけご紹介したいと思います。

ソースコードの取得

下記のページよりZIPファイルをダウンロードします。
https://github.com/j4mie/idiorm

ZIPファイルを解凍すると中にidiorm.phpというファイルがあるのでそれを使用します。

使用するテーブル

今回は動作確認用にuserというテーブルを使用します。
データは以下のように事前に登録しておきました。

データを1件取得するサンプルコード

require_once('idiorm-master/idiorm.php');

ORM::configure('mysql:host=localhost;dbname=xxx');
ORM::configure('username', 'xxx');
ORM::configure('password', 'xxx');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

$user = ORM::for_table('user')->where("id",1)->find_one();
var_dump($user->as_array());

上記コードを実行すると以下のようになります。

where句でid=1のレコードを取得する場合のコードです。

データを複数件取得するサンプルコード

require_once('idiorm-master/idiorm.php');

ORM::configure('mysql:host=localhost;dbname=xxx');
ORM::configure('username', 'xxx');
ORM::configure('password', 'xxx');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('return_result_sets', true);

$user_list = ORM::for_table('user')->where_raw("name like '%山田%'")->order_by_asc("id")->limit(2)->offset(0)->find_many();
foreach($user_list->get_results() as $row){
	var_dump($row->as_array());
}

上記コードを実行すると以下のようになります。

nameに”山田”が含まれるレコードをIDの昇順に2件取得する場合のコードになります。
複数件取得の場合はORM::configure(‘return_result_sets’, true);の部分の記述が必要なようです。書かないと例外が発生します。

データを更新するサンプルコード

require_once('idiorm-master/idiorm.php');

ORM::configure('mysql:host=localhost;dbname=xxx');
ORM::configure('username', 'xxx');
ORM::configure('password', 'xxx');
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

$user = ORM::for_table('user')->where("id",1)->find_one();
$user->name = "山田三郎";
$user->modified = date("Y-m-d H:i:s");
$user->save();

上記コードを実行すると以下のようになります。

nameを”山田三郎”に変更し、modifiedをシステム日時に更新した場合のコードになります。

まとめ

今回はざっと基本的な使い方を試してみました。
実際にプロジェクトに導入するにはまだまだ試してみないといけないことが沢山ありますが、依存するライブラリなどもなく普通にPHP5以上であれば動くので共用のレンタルサーバなどでも問題なく使えるのではないかと思います。
もっと使い込んでみて、また記事にしたいと思います。
それでは。

コーディング業務のご依頼、ご相談の詳細についてはこちらから

最後までお読みいただき、ありがとうございました。

よろしければシェアしていただければ幸いです。

  • このエントリーをはてなブックマークに追加

関連記事

よろしければこちらの記事もお読みください。

WEB業界ならqam!qam(カム)はWEB業界で働く人や興味がある人に役立つ情報サイトです。
マーケティングやデザイン、マークアップ(コーディング)、プログラム、トレンドなどの情報をqamライター陣が執筆。噛めば噛むほど(読めば読むほど)制作・開発や運営・運用、業界知識やノウハウを学ぶことができます。

トップへ