Проблема с пакетом KNP Paginator
Я использую пакет KNP Paginator, и все работает нормально, пока я не попытаюсь отсортировать по полю, связывая отношения один-ко-многим. У меня есть файл в таблице purchaseOrder с именем "supplier_id", и я пытаюсь отсортировать по нему, но я получаю ошибку "Нет такого поля...". Поле "supplier_id" содержит только идентификационный номер из таблицы "Supplier".
Вот мой код
// Set the up the pagination statement...
$em = $this->getDoctrine()->getManager();
$dql = "SELECT p FROM WIC\PurchaseOrderBundle\Entity\PurchaseOrder p WHERE p.account=:account_id ORDER BY p.id desc";
$query = $em->createQuery($dql);
$query->setParameters(array(
'account_id' => $account->getId(),
));;
$paginator = $this->get('knp_paginator');
$paginatorObject = $paginator->paginate(
$query,
$this->get('request')->query->get('page', 1),25
);
Таким образом, при первой загрузке страницы происходит захват всех заказов на покупку.
Затем я настроил это, чтобы иметь возможность сортировать по поставщику:
<th>{{ knp_pagination_sortable(purchaseOrders, 'Supplier', 'p.supplier') }}</th>
Когда я нажимаю на него, чтобы отсортировать, я получаю эту ошибку:
There is no such field [supplier_id] in the given Query component, aliased by [p]
Мой вопрос заключается в том, как сортировать, когда поле, по которому я сортирую, является частью отношения один ко многим. Идентификатор хранится в поле с именем "supplier_id", но это отношение OtoM.
Спасибо!
2 ответа
Вы можете попробовать paginator с DQL, созданным с помощью QueryBuilder Doctrine.
Короче говоря, вам нужно обойти.
в основном вам нужно иметь обычный запрос, чтобы получить идентификаторы всех объектов, отсортированных так, как вы хотите. С этими идентификаторами вы затем создаете новый запрос, в котором просто ищете эти идентификаторы и разбиваете на страницы этот запрос.