Коллекция paginate прохода Laravel для просмотра
Я хочу разбить все отделы с соответствующими компаниями на мой взгляд. Поэтому я создал соответствующие модели и для выбора только необходимых полей создал коллекцию. В моем контроллере я создаю экземпляр этой коллекции и хочу передать его моему представлению. Вот мой контроллер:
$deps = new App\Http\Resources\DepartmentCollection(
App\Department::where('active',1)->whereHas('company',function($query){
$query->where('active',1);
})->with('company')->paginate(10));
Вот моя коллекция:
public function toArray($request)
{
$arr = array();
foreach($this as $t)
{
$a = array();
$a['id'] = $t->id;
$a['title'] = $t->title;
$a['company_title'] = $t->company['title'];
$a['company_id'] = $t->company['id'];
$arr[] = $a;
}
return $arr;
}
Когда я возвращаю $deps в моем контроллере, чтобы я мог видеть необработанные данные, он выглядит хорошо.
data: {
0 : {
id : 1
title : "Prod.asdfasdf"
company_title : "asdf"
company_id : 1
Но всякий раз, когда я передаю $deps моему представлению, я всегда получаю законченные модели, как будто никогда не было никакой коллекции.
return $deps;
return view('abteilungen',['departments'=>$deps]);
Что я делаю неправильно?
РЕДАКТИРОВАТЬ: я пытался с помощью
return view('abteilungen',['departments'=>$deps->toArray($request)]);
но это удалило информацию о нумерации страниц, предоставленную Laravel, а также доступ к
$departments->links()
на мой взгляд не будет работать.
3 ответа
Вы можете просто использовать Eloquent Builder
и вернуть Collection
только с выбранными столбцами, как это:
Department::where('active',1)
->whereHas('company',function($query){
$query->where('active',1);
})->with('company')
->select('id', 'title', 'company.id', 'company.title')
->paginate(10);
Попробуйте, я думаю, вам нужно выбрать столбцы компании перед загрузкой eagar:
Department::where('active',1)
->whereHas('company',function($query){
$query->where('active',1);
})
->with(['company' => function ($query) {
$query->select('id', 'title');
}])
->paginate(10);
Может быть, https://laravel-livewire.com/docs/2.x/pagination вам поможет. Я сделал это:
view('myview')->with('data', $eloquentData->toArray());
и у меня все работало нормально.