Можем ли мы создать разбиение на страницы на основе двух объектов в Symfony 4 с помощью KnpPaginatorBundle?

Я нигде не смог найти в Интернете, может ли KnpPaginatorBundle обрабатывать разбиение на страницы на основе 2 (или более) объектов.

Скажем, у меня есть социальная страница на моем веб-сайте, где я хотел бы перечислить все сообщения Reddit и Twitter за последнюю неделю по заданной теме. Я удалял и хранил эти данные в своей БД.

Теперь хотелось бы отобразить его в удобном виде с помощью пагинации. Для этого я хотел бы объединить 50/50 набор сущностей, с одной стороны, из Reddit, а с другой стороны, из Twitter.

Возможно ли это сделать? Если нет, что бы вы порекомендовали сделать, чтобы разбить на страницы набор из двух разных объектов, отображаемых вместе?

Обратите внимание, что оба объекта связаны с другим объектом Topic с помощью ManyToMany, но я не думаю, что knppaginatorbundle может обрабатывать разбивку на страницы на основе реляционного объекта (может ли он выполнять левое соединение со смещением и максимальным результатом? не уверен)

Спасибо!


person Miles M.    schedule 03.08.2018    source источник
comment
В итоге я создал свою собственную систему разбиения на страницы, но я приму ответ @Amira, если кто-то когда-нибудь будет искать ответ на этот вопрос. Спасибо Амира за помощь.   -  person Miles M.    schedule 11.08.2018
comment
Пожалуйста. Это просто трюк, который я использовал в одном из своих проектов.   -  person Amira Bedhiafi    schedule 23.09.2018


Ответы (1)


Я пробовал что-то подобное в одном из своих проектов:

{
     $em = $this->getDoctrine()->getManager();   
        $query = "SELECT f1,f2,f3 FROM table1
    UNION
    SELECT f1,f2,f3 FROM table2";
    $statement = $em->getConnection()->prepare($query);
            $statement->execute();  
        $paginator  = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
            $query, /* query NOT result */
            $request->query->getInt('page', 1)/*page number*/,
            10/*limit per page*/
        );

        // parameters to template
        return $this->render('...', array('pagination' => $pagination));
    }
person Amira Bedhiafi    schedule 03.08.2018
comment
Гений. Спасибо - person Miles M.; 06.08.2018