2

私は3レベルのモデル構造を持っています:

  • Model_Race has_many Model_Class

  • Model_Class has_many Model_Driver

ここで、Model_Class と Model_Driver に順序を保つための order_index プロパティがあるとします。

レースを取得し、クラスとドライバーを正しくソートするクリーンな方法はありますか?

4

1 に答える 1

7

ドキュメントはこれを明確に示しています、私はどういうわけかそれを見逃しました:

配列構文の検索

$race = Model_Race::find($id, array(
        'related' => array(
            'class' => array(
                'order_by' => array('order_index' => 'asc'),
                'related' => array(
                    'driver' => array(
                        'order_by' => array('order_index' => 'asc'),
                    )
                )
            )
        )
    )
);

クエリメソッド連鎖構文の使用

(上記の配列構文よりも私の好みの方法)

$race = Model_Race::query()
    ->related('race.class')
    ->related('race.class.driver)
    ->order_by('race.class.order_index', 'asc')
    ->order_by('race.class.driver.order_index', 'asc')
    ->get();

モデルに組み込む

これがデフォルトで発生するように、モデルに関係を設定できます。

レースモデル:

protected static $_has_many = [
    'classes' => [
        'conditions' => [
            'order_by' => [
                'order_index' => 'asc'
            ]
        ]
    ]
];

クラスモデル:

protected static $_has_many = [
    'drivers' => [
        'conditions' => [
            'order_by' => [
                'order_index' => 'asc'
            ]
        ]
    ]
];
于 2012-07-25T04:10:07.940 に答える