Как использовать разбиение на страницы с помощью keyBy

#php #laravel-5.4 #pagination

#php #laravel-5.4 #разбивка на страницы

Вопрос:

Я новичок в Laravel, и у меня возникли проблемы с разбиением на страницы при использовании keyBy().

Работает следующее:

 $customers = Customers::paginate(10)
  

Но следующее выдает ошибку: Вызов неопределенного метода IlluminateDatabaseQueryBuilder::keyBy()

 $customers = Customers::keyBy('id')->paginate(10)
  

Итак, как мне разбивать страницы при использовании keyBy?

Я попытался вставить это в метод загрузки AppServiceProvider.php без какого- либо эффекта:

 if (!Collection::hasMacro('paginate')) {
 Collection::macro('paginate', 
 function ($perPage = 15, $page = null, $options = []) {
 $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
 return (new LengthAwarePaginator(
 $this->forPage($page, $perPage), $this->count(), $perPage, $page,$options))->withPath('');
 });
}
  

Комментарии:

1. keyBy() это метод Collection , а не Builder . Замыкания, подобные ->get() или ->all() преобразующие a Builder в a Collection , поэтому вам придется вызывать Customers::get()->keyBy(...) … Но тогда вы не можете вызвать paginate() , так как это метод Builder , а не Collection . Возможно, вам потребуется переосмыслить то, что вы пытаетесь сделать, например, возможно groupBy() unique() , выбор или.

2. Привет, Тим. Спасибо за понимание. Будет продолжать расследование.