假设我有两张桌子:cities
和countries
。 City
模型belongsTo
a Country
。现在,当我显示城市列表时,我希望按国家名称和城市名称进行排序。
我在City
模型类中尝试了这个:
var $order = array('Country.name' => 'asc', 'City.name' => 'asc');
排序顺序对我的索引页面正常工作,但是在我要求模型不加载关联模型的几个地方我遇到错误。当我更改加载哪些表时,是否必须更改订单参数,或者是否有更聪明的方法来执行此操作?
目前,我想我会将默认订单定义设为City.name
,然后在索引页面上将其更改为Country.name
和City.name
。这样,默认情况下它是安全的,我不应该出现意外错误。
更新:作为Rob suggested,您可以在模型关联中指定订单参数。查询构建器将如下应用它们:
order
字段,请先应用它。order
参数,请将其添加到列表的末尾。为了实现我的例子,我会这样做:
class City extends AppModel {
var $belongsTo = array(
'Country' => array(
'order' => array('Country.name' => 'asc', 'City.name' => 'asc')));
}
一个警告:如果您关闭City.recursive
,那么城市将会被排除。但是,当我关闭递归时,我通常只检索一条记录。
答案 0 :(得分:2)
您是否尝试直接在关联中定义订单?我从来不需要这样做,所以我不能发誓它会做你想要的事情,但是:
class City extends AppModel {
$belongsTo = array(
'Country' => array(
'Order' => 'Country.name'
)
);
}
当然,您可以为Country
模型执行类似操作。
答案 1 :(得分:0)
这是未经测试的,但这个想法是 在国家模型中你可以做到
hasMany = array('City');
function beforeFind()
{
foreach($this->hasMany as $model)
{
$this->order[] = $model['className'].'.'.'ASC';
}
}
不值得做IMO。你方式很好。