我有以下结构:
Category hasMany CategoryDynamic
当我使用Containable行为时,我希望获得CategoryDynamic
字段排序的CategoryDynamic.language
数据。例如,而不是默认结构:
array(
'Category' => array(
// ...
),
'CategoryDynamic' => array(
'0' => array(
// ...
),
'1' => array(
// ...
),
),
);
我希望按CategoryDynamic.language
字段排序:
array(
'Category' => array(
// ...
),
'CategoryDynamic' => array(
'eng' => array(
// ...
),
'fra' => array(
// ...
),
),
);
CakePHP可以默认执行此操作,还是需要修改afterFind
函数中的结果?
答案 0 :(得分:1)
如果使用contains,Cakephp会执行此类解决方案。
它可以对'hasMany'关系中的数据进行排序,但不会按照您编写的方式返回。
CategroyModel:
class CategroyModel extends Model {
public $actsAs = array('Containable');
public $hasMany = array('CategoryDynamic');
public function getData(){
$conditions['contain'] = array(
'CategoryDynamic' => array(
'order' => 'CategoryDynamic.language ASC'
)
);
return $this->find('first', $conditions);
}
}
CategoryDynamicModel:
class CategoryDynamicModel extends Model {
public $actsAs = array('Containable');
public $belongsTo = array('Categroy');
}
然后当你打电话
$this->Categroy->getData();
在控制器中,它将给出SortDynamic:
array(
'Category' => array(
// ...
),
'CategoryDynamic' => array(
0 => array(
language => 'eng'
// ...
),
1 => array(
language => 'fra'
// ...
),
...
),
);
我无法运行并检查上面发布的确切代码,因为我没有项目或架构,但我在项目中做了类似的事情并且已经有效。