Я пытаюсь разбивать отношения с Красноречием:
$query = Product::find(1)->options()->paginate();
Но я получаю следующую ошибку:
Fatal error: Call to a member function getCurrentPage() on a non-object
Я подтвердил, что код $query = Product::find(1)->options()
возвращает набор опций. Объект $query
имеет тип hasMany
. Ниже приведены классы моделей, которые я использую.
class Product extends Eloquent { protected $table = 'products'; public function options () { return $this->hasMany('ProductOption', 'product_id'); } } class ProductOption extends Eloquent { protected $table = 'product_options'; public function product() { return $this->belongsTo('Product', 'product_id'); } }
Неужели красноречивый не возвращает разбитые на страницы результаты для отношений?
Вы не можете ленить такую реляционную разбивку на нагрузку, вместо этого в вашей модели продукта добавьте следующую функцию ниже ваших вариантов, у которой много отношений
public function getOptionsPaginatedAttribute() { return $this->options()->paginate(10); }
Это позволит вам называть разбиение на страницы на реляционные данные на
$product->options_paginated
Создайте персонализированный указатель длины.
$options = new LengthAwarePaginator(Product::find(1)->options()-> ->skip(($request->input('page', 1) - 1) * 10)->take(10)->get(), Product::find(1)->options()->count(), 10, $request->input('page', 1), [ // paginator options here ]);
$query = Product::find(1)->get()->options()->paginate();
Попробуйте добавить get