Cakephp 对hasMany绑定中的子行进行排序

Cakephp 对hasMany绑定中的子行进行排序,cakephp,Cakephp,我的结构如下: array( 'Category' => array( // ... ), 'CategoryDynamic' => array( '0' => array( // ... ), '1' => array( // ... ), ), ); Category有许多CategoryDynamic 当我

我的结构如下:

array(
    'Category' => array(
        // ...
    ),
    'CategoryDynamic' => array(
        '0' => array(
            // ...
        ),
        '1' => array(
            // ...
        ),
    ),
);
Category有许多CategoryDynamic

当我使用Containable行为时,我希望获得按
CategoryDynamic.language
字段排序的
CategoryDynamic
数据。例如,不是默认结构,而是:

array(
    'Category' => array(
        // ...
    ),
    'CategoryDynamic' => array(
        '0' => array(
            // ...
        ),
        '1' => array(
            // ...
        ),
    ),
);
我想按
CategoryDynamic.language
字段对它们进行排序:

array(
    'Category' => array(
        // ...
    ),
    'CategoryDynamic' => array(
        'eng' => array(
            // ...
        ),
        'fra' => array(
            // ...
        ),
    ),
);

CakePHP在默认情况下是否可以这样做,或者我是否需要在
afterFind
函数中修改结果?

如果使用contain,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);
  }
}
类别动力学模型:

class CategoryDynamicModel extends Model {
  public $actsAs = array('Containable');
  public $belongsTo = array('Categroy'); 
}
那么当你打电话的时候

$this->Categroy->getData();
在控制器中,它将提供排序的CategoryDynamic:

array(
    'Category' => array(
        // ...
    ),
    'CategoryDynamic' => array(
        0 => array(
            language => 'eng'
            // ...
        ),
        1 => array(
            language => 'fra'
            // ...
        ),
        ...
    ),
);

我无法运行和检查我上面发布的确切代码,因为我没有项目或模式,但我在我的项目中做了一些类似的事情,它已经工作了。

如果您想用键更新数据结构
eng
fra
,那么答案是“否”,但如果您想要正确的顺序,那么答案是“是”。如果您提供更多的上下文,至少是源代码片段,我想答案可能会更详细。我不知道应该提供什么样的代码。。。我可以再解释一下,
CategoryDynamic
表包含在不同语言之间更改的所有字段,而
Category
仅包含树结构数据。“刚好正确的顺序”是什么意思?好吧,那么,我想我将在
CategoryDynamic
afterFind()函数中手动排序数据。这也是一种解决方案,但在afterFind()函数中进行自定义排序时应该小心。因为在另一种情况下,您可能希望以另一种方式对CategoryDynamic进行排序(例如,id ASC),afterFind()将阻止它。