0

我的模型关联链:

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 的问题?

4

1 回答 1

-1

感谢您发布此信息,我实际上遇到了同样的问题,并且根据您对问题的洞察力,我能够解决它。

如果有人感兴趣,我在 CakePHP 的问题跟踪器上发布了一张票,但基本上他们说它不会被修复,并提供了两个绕过问题的建议。

我修复它的方法是强制模型与具有我感兴趣的字段的模型相关联。

于 2013-01-28T22:59:25.383 回答