Laravel: результаты paginate() непостоянны на разных страницах

У меня возникла проблема с разбивкой на страницы следующим образом:

Запрос:

GET http://localhost:1000/api/v1/public/blog/articles

Ответ:

{
    "current_page": 1,
    "data": [
        {
            "article_id": 43
        },
        {
            "article_id": 107
        },
        {
            "article_id": 171
        },
        {
            "article_id": 22
        },
        {
            "article_id": 86
        },
        {
            "article_id": 150
        },
        {
            "article_id": 1
        },
        {
            "article_id": 65
        },
        {
            "article_id": 129
        },
        {
            "article_id": 44
        }
    ],
    "first_page_url": "http://localhost:1000/api/v1/public/blog/articles?page=1",
    "from": 1,
    "last_page": 18,
    "last_page_url": "http://localhost:1000/api/v1/public/blog/articles?page=18",
    "next_page_url": "http://localhost:1000/api/v1/public/blog/articles?page=2",
    "path": "http://localhost:1000/api/v1/public/blog/articles",
    "per_page": "10",
    "prev_page_url": null,
    "to": 10,
    "total": 179
}

Итак, теперь при повторном запросе по той же ссылке отображается другой набор статей с другими идентификаторами. Также, если я перехожу на страницу = 1 или страницу = 2, на каждой странице результаты непостоянны.

Я не уверен, откуда возникает эта проблема, я хочу отметить, что мои другие запросы с разбивкой на страницы работают нормально, за исключением случаев, когда я пытаюсь объединить запросы для получения определенного результата следующим образом:

$query = DB::query();

// Then Concatenating other queries based on options

// Now Execute The Whole Query
$fetched_articles = $query->paginate(5);

Было бы полезно, если бы кто-нибудь мог описать здесь потоки paginator с решением или обходными путями.

Заранее спасибо !


person Fahim Uddin    schedule 06.05.2019    source источник
comment
Вы используете группу по?   -  person Prafulla Kumar Sahu    schedule 06.05.2019
comment
Да, на многих уровнях в зависимости от параметров, пока я объединяю другие запросы.   -  person Fahim Uddin    schedule 06.05.2019
comment
Проверьте документацию laravel, упоминается, что нумерация страниц laravel хорошо работает с group by.   -  person Prafulla Kumar Sahu    schedule 06.05.2019
comment
@PrafullaKumarSahu Да, вы правы, дайте ответ с потоком пагинатора, я попробую создать пагинатор вручную, если он работает, то благодаря вам моя проблема решена.   -  person Fahim Uddin    schedule 06.05.2019
comment
Я разместил ответ, а также справочную ссылку, по которой вы можете следовать.   -  person Prafulla Kumar Sahu    schedule 06.05.2019


Ответы (1)


Согласно документации Laravel

В настоящее время операции разбиения на страницы, использующие оператор groupBy, не могут быть эффективно выполнены Laravel. Если вам нужно использовать groupBy с набором результатов с разбивкой на страницы, рекомендуется запросить базу данных и создать разбивку на страницы вручную.

поэтому вы не можете использовать groupBy в своем запросе, если хотите разбивку на страницы.

Кстати, вы можете попробовать этот сообщение в блоге , может быть, это сработает для вас.

person Prafulla Kumar Sahu    schedule 06.05.2019
comment
Что ж, теперь, после создания пагинатора вручную, проблема не решена, однако, если я получаю результаты только с помощью метода get (), идентификаторы статей также непостоянны в результатах. Когда я удаляю groupBy(), он работает нормально. Что мне теперь делать ? - person Fahim Uddin; 06.05.2019
comment
@FahimUddin, если groupBy не является обязательной, лучше удалить ее, если вам нужна группа, пожалуйста, опубликуйте свой код, чтобы я мог понять, какова реальная ситуация. - person Prafulla Kumar Sahu; 06.05.2019
comment
Итак, я решил проблему с groupBy() , и теперь она работает нормально. Спасибо вам за указание на предостережение Laravel о разбиении на страницы с помощью groupBy и за указанную запись в блоге. - person Fahim Uddin; 06.05.2019