在Laravel中覆盖paginator项

时间:2018-04-23 20:59:20

标签: php laravel laravel-5

我有一个来自复杂查询的ID列表。我对该复杂查询的响应进行了分页,然后使用这些ID来获取雄辩的模型。然后我通过带有分页元数据的资源进行了处理。

laravel AbstractPaginator类保护items属性,因此您无法轻易覆盖它们。我有一个使用ReflectionProperty的解决方案,但我的解决方案更简单。

以下作品但不是特别优雅。

// $studentIds == Long complicated query that would return 1000s of students
$data = $studentIds->paginate(); // Execute the query limited to 15.

// Use ids to get eloquent models for our students
$students = Student::whereIn('id', $data->pluck('id'))->get();

// Overwrite paginate `items` attribute so that our response contains pagination meta.
$rp = new \ReflectionProperty('Illuminate\Pagination\AbstractPaginator', 'items');
$rp->setAccessible(true);
$rp->setValue($data, $students);

return new StudentResourceCollection($data);

1 个答案:

答案 0 :(得分:3)

使用setCollection()方法:

$data->setCollection($students);