我正在使用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)。显然,在新文档中没有任何更新。
答案 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')) ?>
通过这种方式,一切都像魅力一样。如果您无法识别正确的字段,则可以启用查询调试并查看查询中使用的字段。