使用分页器时如何对包含的关联中的字段进行排序?

时间:2017-04-25 10:34:08

标签: sorting cakephp pagination contains cakephp-3.x

如何使用CakePHP对分页查询进行分页?数据没关系,但没有工作排序链接......

在我的控制器中:

 $this->paginate = [
        'contain' => ['Slaves.Devices','Measurements','AlarmTypes.FunctionTypes.Units'],
        'maxLimit'=>50
    ];

    $alarms=$this->AlarmGenerates->find()
            ->select([
                'Slaves.name',
                'Devices.name',
                'AlarmTypes.nazwa',
                'FunctionTypes.name',
                'Measurements.value',
                'AlarmTypes.max_value',
                'AlarmTypes.min_value',
                'Units.name',
                'AlarmGenerates.created'
                ])
            ->contain(['Slaves.Devices','Measurements','AlarmTypes.FunctionTypes.Units']);
    $alarmyAll=$this->paginate($alarms);

在模板中:

<th><?=$this->Paginator->sort('slave.device.name','Obiekt')?></th>
<th><?=$this->Paginator->sort('alarm_type.nazwa','Nazwa Alarmu')?></th>
<th><?=$this->Paginator->sort('name',null,['model'=>'FunctionTypes'])?></th>
<th><?=$this->Paginator->sort('measurement.value','Wartość',['model'=>'Measurement'])?></th>
 <th><?=$this->Paginator->sort('alarm_type.max_value','Dopuszczalny przedzial')?></th>
 <th><?=$this->Paginator->sort('created','Czas wystąpienia')?></th>

请求帮助......

1 个答案:

答案 0 :(得分:1)

您可以将想要排序的列添加到分页的白名单中: -

public $paginate = [
    'contain' => ['Slaves.Devices', 'Measurements', 'AlarmTypes.FunctionTypes.Units'],
    'maxLimit' => 50,
    'sortWhitelist' => [
        'slave.device.name',
        'alarm_type.nazwa',
        'name',
        'measurement.value',
        'alarm_type.max_value',
        'created'
    ]
];

如果您需要能够对关联数据中的任何列进行排序,则需要按official docs中提到的sortWhitelist定义列。

  

当您要对任何关联数据或可能属于您的分页查询的计算字段进行排序时,此选项是必需的