如何使用CakePHP 3中的Paginator对外部字段进行排序

时间:2015-08-10 09:44:21

标签: cakephp-3.0

我正在使用cakephp 3.0开发一个应用程序。 我想知道paginator是否允许对来自“contains”子句中包含的其他表的字段进行排序。 例如,我有这样的陈述:

    $this->paginate = [
        'contain' => ['Actors']
    ];

表'Actors'包含字段'description'。是否可以按表Actors的描述字段排序?

我尝试使用点表示法指定字段:

$this->Paginator->sort('Actors.description', __('Description'))

以及在选项数组中包含模型:

$this->Paginator->sort('description', __('Description'), ['model' => 'Actors'])

在这两种情况下,它似乎都不起作用。这两种方法来自cakephp 2.0,其中一切正常(cakephp Paginator -> sort - model option)。显然,在新文档中没有任何更新。

1 个答案:

答案 0 :(得分:4)

正如JoséLorenzo在此Pagination Sort in Cakephp 3.x所说,Paginator会阻止主表中不可用的每个字段。 因此,如果您需要通过外部字段进行排序,则必须在连接表中指定cakephp使用的完全限定名称。

在我的示例中,我需要指定以下内容:

$this->paginate = [
    'contain' => ['Actors'],
    'sortWhitelist'=>['Actors.description']
];

并在视图中使用此表达式:

<?= $this->Paginator->sort('Actors.description', __('Description')) ?>

通过这种方式,一切都像魅力一样。如果您无法识别正确的字段,则可以启用查询调试并查看查询中使用的字段。