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

How to sort on fields from contained associations when using the paginator?

如何使用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>

请帮忙...

您可以将您希望能够作为排序依据的列添加到分页的白名单中:-

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'
    ]
];

如果您需要能够对关联数据中的任何列进行排序,那么您需要在 sortWhitelist 中定义列,如 official docs 中所述。

This option is required when you want to sort on any associated data, or computed fields that may be part of your pagination query