Cake3 Paginator Sort Error

У меня есть очень простая модель, которую я хочу разбить на страницы. Разбивка на страницы работает, но ссылки сортировки не имеют никакого эффекта:

Мой контроллер:

public $paginate = [
        'limit' => 10,
        'order' => [
            'Properties.id' => 'asc'
        ],
        'sortWhitelist' => [
            'Properties.id',
            'Properties.name',
            'Properties.active'
        ],
];

Мой запрос:

$properties = $this->Properties->find('all')->where($options)->contain($contains)->order(['Properties.id']);

$this->set('properties', $this->paginate($properties));

Мой вид отображает 10 элементов на странице и ссылки на страницы / следующий / предыдущий работают нормально. Когда я нажимаю на ссылку сортировки:

$this->Paginator->sort('id', 'ID')

URL называется:

Свойства / индекс /3? сортировать = идентификатор и направление = убывание

Страница перезагружается, но порядок данных не меняется.

1 ответ

Решение

Белый список ожидает точное имя поля, которое вы используете в сортировке. Он не будет автоматически предшествовать имени первичной таблицы, поэтому ваш белый список должен выглядеть следующим образом:

public $paginate = [
    'limit' => 10,
    'order' => [
        'Properties.id' => 'asc'
    ],
    'sortWhitelist' => [
        'id',
        'name',
        'active'
    ],
];

Он увидит "id" в запросе и проверит, что точное имя поля "id" существует в белом списке.

Кроме того, кажется, что вы включаете order() по вашему запросу. Чтобы разрешить нумератору устанавливать порядок, вы должны удалить это предложение.

Другие вопросы по тегам