FuelPHP では DBを操作をする方法の一つに Ormがある(FuelPHPのモデルと3種類のDB利用方法)。
Orm はオブジェクトリレーショナルマッパーの略称。
1.Ormとは
FuelPHP には標準でOrmを使用するための Ormパッケージ が含まれている。
Ormパッケージとは、データベースのテーブルレコードとオブジェクトの、マッピングやテーブル間のリレーションを操作するためのパッケージ。
Ormに含まれるModelクラスでは、基本的なCrud用のメソッドも用意されている。
Ormパッケージのモデルでは、1つのインスタンスが1件のレコードに対応するようになっている。
forge()メソッドを使ってインスタンスを生成する①。
カラムはプロパティとしてアクセスしプロパティに値を代入できるようになっている②。
save()メソッドでデータベースにインサートする③。
$temp = Model_Test::forge(); //① $temp->name = 'testさん'; //② $temp->email = '[email protected]'; //② $temp->sex = 1; //② $test->prefecture_id = 12; //② $test->save(); //③
配列で渡すことも可能。
$props = array('name'=>'testさん', 'email'=>'[email protected]', 'sex'=>1, 'prefecture_id'=>12); $test = Model_Test::forge($porps); $test->save();
注意として、これらの処理は、Orm\Modelクラスの静的プロパティである$_propertiesに、カラム名に対応した配列を指定する必要がある。
それを簡単にしてくれるのが FuelPHPでのマイグレーション。
2.マイグレーションによるOrmを使う準備
Ormモデルの作成は、マイグレーションで作るのが便利。
マイグレーションについてはFuelPHPでマイグレーションによるテーブルの作成を参照。
FuelPHPではモデルの生成にoilコマンドラインのg modelがある。
カラム名とカラムの方を指定した形で入力する
cd ~/workspace4.3.1/blog oil g model tests name:varchar[50] email:varchar[255] sex:int prefecture_id:int
これでモデルとマイグレーションファイルが作成された。
マイグレーションファイルの中にテーブルの作成に必要なコードが生成されている。
以下、APPPATH/migrations/内のファイル。
create_tableがあり、カラムも指定されている。
<?php namespace Fuel\Migrations; class Create_tests { public function up() { \DBUtil::create_table('tests', array( 'id' => array('constraint' => 11, 'type' => 'int', 'auto_increment' => true, 'unsigned' => true), 'name' => array('constraint' => 50, 'type' => 'varchar'), 'email' => array('constraint' => 255, 'type' => 'varchar'), 'sex' => array('constraint' => 11, 'type' => 'int'), 'prefecture_id' => array('constraint' => 11, 'type' => 'int'), 'created_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), 'updated_at' => array('constraint' => 11, 'type' => 'int', 'null' => true), ), array('id')); } public function down() { \DBUtil::drop_table('tests'); } }
テーブルを作成するコマンドを実行。
oil refine migrate
「Performed migrations for app:default:」と出たらOK。
testsというテーブルができてる。
3.Ormパッケージを有効にする
Ormパッケージを有効にする。
Ormパッケージとはデータベースのテーブルレコードとオブジェクトのマッピングやテーブル間のリレーションを操作するためのパッケージ。
Orm\Modelを使うために必要。
デフォルトでは自動で読み込まれていないため、conifg.phpの always_load配列に追加する。
'always_load' => array( 'packages' => array( 'orm', ),
4.Ormのモデル
ここからは生成されたモデルについて。
APPPATH/classes/model/test.php が今回生成されたやつ。モデル名はテーブル名の単数形。
Orm\Modelというクラスを拡張してることがわかる。
また、testsテーブルとカラムと同じプロパティを持つ。
<?php class Model_Test extends Orm\Model { protected static $_properties = array( 'id', 'name', 'email', 'sex', 'prefecture_id', 'created_at', 'updated_at', ); //ここより下は今は気にしない protected static $_observers = array( 'Orm\Observer_CreatedAt' => array( 'events' => array('before_insert'), 'mysql_timestamp' => false, ), 'Orm\Observer_UpdatedAt' => array( 'events' => array('before_update'), 'mysql_timestamp' => false, ), ); protected static $_table_name = 'tests'; }
コメント