我的模型关联链:
ArchitectPurchase belongsTo ArchitectProfile belongsTo User
我的行动:
$this->ArchitectPurchase->recursive = -1;
$this->ArchitectPurchase->Behaviors->attach('Containable');
$this->paginate['joins'] = array(
array(
'table' => 'architect_profiles',
'alias' => 'ArchitectProfileJoin',
'type' => 'inner',
'conditions' => array(
'ArchitectProfileJoin.id = ArchitectPurchase.architect_profile_id'
)
),
array(
'table' => 'users',
'alias' => 'User',
'type' => 'inner',
'conditions' => array(
'User.id = ArchitectProfileJoin.user_id'
)
)
);
$this->paginate['order'] = 'User.name DESC';
$this->paginate['contain'] = array(
'ArchitectProfile' => array(
'fields' => array('ArchitectProfile.id'),
'User' => array(
'fields' => array('User.name')
)
)
);
$this->set('architectPurchases', $this->paginate());
此操作工作正常,按 User.name DESC 对结果进行排序。但是当我使用创建的链接时
echo $this->Paginator->sort('User.name')
在我看来,它不起作用!
查看核心文件,发现问题出在 PaginatorComponent 的 validateSort 方法:
if ($object->hasField($field)) {
$order[$alias . '.' . $field] = $value;
} elseif ($object->hasField($key, true)) {
$order[$field] = $value;
} elseif (isset($object->{$alias}) && $object->{$alias}->hasField($field, true)) {
$order[$alias . '.' . $field] = $value;
}
由于 User 模型与 ArchitectPurchase 模型没有直接关联,我得到
$order = array()
代替
$order = array('User.name' => 'asc')
我尝试使用 $whitelist 参数,但仍然无法正常工作...
所以我不得不破解核心(noooo !!!),从第 345 行到第 363 行进行评论以使其工作。
我做错了什么还是这是 2.2.1 的问题?