では引き続きOrm/Modelの作成に映って参ります。
Ormというのは、開発入門の02で触ったconfig.phpに記述のあった
FuelPHPがもともと持っているパッケージのひとつです。
※02記述時点ではOrmを入れていませんでしたが、必要になったので追記しました
ORMとはObjectRelationMappingの略で、Model同士のリレーションを作成するためのものです。
これを利用することによって、例えばPersonalテーブルの個人IDをキーにProfileテーブルから
いっぺんにデータを引きずり出す、というようなことが可能になります。
モデルクラス記述
<?php
use Orm\Model;
class Model_User extends \Orm\Model
{
protected static $_properties = array(
'id',
'email',
'password',
'group',
'last_login',
'login_hash',
'profile_fields',
'created_at',
'updated_at'
);
protected static $_primary = array('id');
protected static $_has_one = array(
'profile' => array(
'key_from' => 'id',
'model_to' => 'Model_Profile',
'key_to' => 'user_id',
'cascade_save' => true, // 主モデル保存時に参照モデルを保存するか
'cascade_delete' => true, // 主モデル削除時に参照モデルを削除するか
)
);
}
Userテーブルについては、私はSingleAuthパッケージを利用するためにこの形式で固定しています。
かなり初期の方に設定した箇所なので過不足あるかもしれません。
モデルと接続を行うDBのテーブル名は、モデル名の複数形になります。
userならusers、categoryならcategoriesです。
ひとまずこの形式(プロパティ、主キー指定、リレーション)が書ければモデルとしての役割は果たすことができます。
_has_manyや_belongs_toなどその他のリレーションについてはFuelPHP公式リファレンスを参照してください。
前回クエリビルダについて書いた中で
DB->select()->from->('users')->where('id',$id)->execute()->as_array();
といった記述をしましたが、独自モデルを作成した場合これが
$user=Model_User::find_by_id($id);
$email=$user->email;
という形で記述することができるようになります。
戻り値も配列ではなくクラスの形になりますので、呼び出しがシンプルになります。
ちなみに参照モデルも一緒に呼び出したい場合は
$user=Model_User::find_by_id($id,array('related'=>array('profile')));
$name=$user->profile->name;
と記述します。
relatedには、モデル作成時$_has_oneに記述したキーを記述します。
_has_manyはまだ試してません!以上!
出番無かった顔文字ヽ(´@ω@`)ノ