FuelPHP ORM

 ORMは、オブジェクト関係マッピングの略。

オブジェクトにDBのテーブルの行をマップし、それらのオブジェクト間の関係を確立する。


・モデルの作成

 テーブル名 : 複数形

 クラス名 : Model_ + (テーブル名の単数形の大文字始まり)

 ファイル名 : (テーブル名の単数形の小文字).php

 article.php (テーブル名 : articles)

 class Model_Article extends Orm\Model {

 }


・主キーの設定

 'id'以外の主キーや複数の主キーを使用する場合に設定する。

 protected static $_primary_key = array('my_id');


・カラムに型、ラベル、バリデーションを設定

 protected static $_properties = array(

   'id',

   'name' => array(

   'data_type' => 'varchar',

   'label' => 'Article Name',

   'validation => array(

         'required',

         'min_length' => array(3),

         'max_length' => array(20)),

   'form' => array('type' => 'text'),

   'default' => 'New article',),

   'gender' => array(

         'data_type' => 'varchar',

         'label' => 'Gender',

         'form' => array(

              'type' => 'select',

              'options' => array('m' > 'Male', 'f' => 'Female')),

         'validation' => array('required'),),

   'created_at' => array(

         'data_type' => 'int',

         'label' => 'Created At',

         'form' => array('type' => false,),), // formには表示されない

   'updated_at' => array(

         'data_type' => 'int',

         'label' => 'Updated At'));


・クエリ実行時のデフォルトの条件を設定

 order_byは、定義されていない場合のみ有効。

 whereは、他のwhereにANDで追加される。

 protected static $_conditions = array(

   'order_by' => array('id' => 'desc'),

   'where' => array(

         array('publish_date', '>', 1370721177),

         array('published', '=', 1),),);


・論理削除モデル

 \Orm\Model_Soft を継承する。

 class Model_Employee extends \Orm\Model_Soft {

 }

 削除されたtimestampを設定するカラムを指定する。

 protected static $_soft_delete = array(

               'deleted_field' => 'deleted',

               'mysql_timestamp' => true,

 );


 ・使用例

  $employee = Model_Employee::find(1);

  $employee->delete(); // find()で取得できなくなる


 ・論理削除モデルを物理削除する場合

  $employee = Model_Employee::find(1);

  $employee->purge();


 ・論理削除されたデータを復元する

  $employee = Model_Employee::find_deleted(1);

  // または

  $employee = Model_Employee::deleted(1);

  $employee->restore();

  // または

  $employee->undelete();