CodeIgniter 2.0.x に対応した DataMapper ORM を試してみた。
まずdatabaseを用意し、tableを用意する
本当はクラス名=table名がいいのだが、ここではめんどくさかったので変えてみた
# テーブルdiseaseについて mysql> show columns from disease; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | ID | int(11) | NO | PRI | 0 | | | name | varchar(64) | YES | | NULL | | | disease | varchar(64) | YES | | NULL | | | age | int(11) | YES | | NULL | | .. mysql> SELECT ID,disease,age FROM disease LIMIT 1 OFFSET 0; +-------+-------------------+------+ | ID | disease | age | +-------+-------------------+------+ | 62170 | OMI #3 #11 Cypher | 80 | +-------+-------------------+------+ 1 row in set (0.00 sec)
patient.php <?php // models/patient.phpとして保存 class Patient extends DataMapper { var $table = 'disease'; // テーブル名を指定 var $validation = array( 'id' => array( 'rules' => array('required'), 'label' => 'ID' ), 'name' => array( 'rules' => array('max_length' => 64), 'label' => 'Patient name' ), 'disease' => array( 'rules' => array('max_length' => 64), 'label' => 'Disease' ), 'age' => array( 'rules' => array(), 'label' => 'Age' ), ); };
テスト用
function index() { // create a temporary user object $g = new Patient(); $g->get(1,0); printf("%d %s %d", $g->ID, $g->disease, $g->age);
表示例
62170 'OMI #3 #11 Cypher' 80
レコード単位でやるならそれこそActiveRecordクラスでそこそこORMしていて十分。
たぶんrelationalなデータ構造になった場合が違うのかもしれない。