Как использовать paginate и findwhere одновременно? (Laravel 5.3)

Я пользуюсь третьей стороной. Я получаю отсюда: https://github.com/andersao/l5-repository

Моя функция в хранилище файлов выглядит следующим образом:

public function displayList($year, $id = NULL)
{
$clauses = ['year' => $year];
if(isset($id)) {
$clauses = array_merge($clauses, ['id' => $id]);
}
$query = Self::orderBy('programcode')
->orderBy('accountcode')
->findWhere($clauses)
->paginate(1);
return $query;
}

Когда выполняется, существует такая ошибка: Method paginate does not exist.,

Я пытаюсь удалить ->findWhere($clauses), Оно работает. Нет ошибок.

Findwhere и paginate, видимо, не могут работать одновременно

Есть ли решение этой проблемы?

1

Решение

Это потому что ->findWhere(...) заканчивает запрос с ->get() и возвращает результаты (красноречивый сбор).

То, что вы пытаетесь сделать, это вызвать ->paginate(...) метод на красноречивая коллекция. Это на самом деле метод на построитель запросов.

Решение

applyConditions

$query = Self::orderBy('programcode')
->orderBy('accountcode')
->applyConditions($clauses)
->paginate(1);

редактировать

Хорошо, итак ->applyCondtions() не возвращает объект, поэтому вы не можете связать методы с ним. Попробуй это:

$query = Self::orderBy('programcode')
->orderBy('accountcode');
$query->applyConditions($clauses);
$query = $query->paginate(1);
2

Другие решения

Как это:

$list = $this->repository->scopeQuery(function($query) use ($filterColumns) {

return $query->where($filterColumns)->orderBy('created_at', 'DESC');

});

$list->paginate(10);
2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector