如何使用FuelPHP的ORM对相关的子模型进行排序

itu*_*eon 2 fuelphp

我有一个3级模型结构:

  • Model_Race has_many Model_Class

  • Model_Class has_many Model_Driver

现在,想象一下Model_Class和Model_Driver有一个order_index属性来保持它们的顺序.

是否有一种干净的方式来获得一个Race并让Class和Driver的排序正确?

itu*_*eon 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'),
                    )
                )
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

使用查询方法链接语法

(我上面的数组语法的首选方法)

$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();
Run Code Online (Sandbox Code Playgroud)

将其构建到模型中

您可以在模型中设置关系,以便默认情况下发生这种情况:

种族模型:

protected static $_has_many = [
    'classes' => [
        'conditions' => [
            'order_by' => [
                'order_index' => 'asc'
            ]
        ]
    ]
];
Run Code Online (Sandbox Code Playgroud)

班级型号:

protected static $_has_many = [
    'drivers' => [
        'conditions' => [
            'order_by' => [
                'order_index' => 'asc'
            ]
        ]
    ]
];
Run Code Online (Sandbox Code Playgroud)