Проблема с пакетом 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.

Короче говоря, вам нужно обойти.

в основном вам нужно иметь обычный запрос, чтобы получить идентификаторы всех объектов, отсортированных так, как вы хотите. С этими идентификаторами вы затем создаете новый запрос, в котором просто ищете эти идентификаторы и разбиваете на страницы этот запрос.

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