October 15, 2012

FuelPHPのORMでconditionsを持ったRelationの書き方。

FuelPHPではORMモデルでテーブル間のリレーションを設定出来ます。
例えば
Model_Parent(parentsテーブル)とModel_Child(childrenテーブル)が1:N。
parents.id = children.parent_id。
として
children.gender = 'male' のカラムのみをcreated_atの昇順で取得する$_has_many。
children.gender = 'female'のカラムのみをcreated_atの昇順で取得する$_has_many。
を設定する場合、以下の書き方になります。
(order_byはascの場合、KeyのみでもOKです。)
protected static $_has_many = array(
    'children_male' => array(
        'key_from' => 'id',
        'model_to' => 'Model_Child',
        'key_to' => 'parent_id',
        'cascade_save' => true,
        'cascade_delete' => true,
        'conditions' => array(
            'where' => array(array('gender', '=', 'male')),
            'order_by' => array('created_at' => 'asc'),
        ),
    ),
    'children_female' => array(
        'key_from' => 'id',
        'model_to' => 'Model_Child',
        'key_to' => 'parent_id',
        'cascade_save' => true,
        'cascade_delete' => true,
        'conditions' => array(
            'where' => array(array('gender', '=', 'female')),
            'order_by' => array('created_at' => 'asc'),
        ),
    ),
);
参考:

使い方は、以下の通りです。
$parent = Model_Parent::find($parent_id);
$children_male = $parent->children_male;
$children_female = $parent->children_female;

No comments:

Post a Comment