Laravel - Объединенная коллекция отличается от коллекции Eloquent? - PullRequest
1 голос
/ 28 мая 2019

У меня проблема с сортировкой и возвратом объединенных коллекций.

Когда я делаю:

$ads = Ad::where('status',1)->where('deleted_at',NULL)->paginate(30);

, это работает, но когда я объединяю это с другой коллекцией, такой как

$one = Ad::where('status', 1)->get();
$two = Ad::where('status', 2)->get();
$ads = $one->merge($two);
$ads->paginate(30);

он говорит мне, что "метод paginate не существует", а также "метод orderBy не существует"

отличаются ли эти коллекции от единичных возвращенных?

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Это потому, что вы возвращаете коллекцию из $one и $two, а затем пытаетесь разбить их на страницы, которые нельзя разбить на страницы, вы можете только разбить на страницы конструктор запросов теперь можно вернуть построитель запросов из $one и $two, удалить get(), но теперь вы можете t use merge () on query builders, so you can use whereIn`, чтобы вернуть рекламу, статус которой в [1,2] как это:

$ads= Ad::whereIn('status', [1,2])->paginate(30);
1 голос
/ 28 мая 2019

Разбиение на страницы работает только в построителе запросов и Eloquent запросе.

Laravel Pagination настраивает MySQL Query для получения результатов только с этой конкретной страницы.

Поскольку у вас уже есть результат запроса, он больше не может использоваться для применения orderBy или нумерации страниц. Однако вы все равно можете разделить коллекцию на несколько частей для своих страниц.

В вашем случае, поскольку вы используете одну и ту же модель, вам лучше получить оба результата:

$ad = Ad::where('status', 1)->orWhere('status', 2)->paginate(20);

Если вы используете разные модели, вы можете разрезать коллекцию, как показано здесь: stackoverflow - Как можно разбить объединенную коллекцию на страницы в Laravel 5?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...