我想在我看来将所有部门与相应的公司分页。因此,我创建了相应的模型,并仅选择了我创建集合所需的字段。在我的Controller中,我创建了此Collection的实例,并希望将其传递给我的View。 这是我的控制器:
$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;
}
当我在Controller中返回$ deps时,我可以看到它看起来很好的原始数据。
data: {
0 : {
id : 1
title : "Prod.asdfasdf"
company_title : "asdf"
company_id : 1
但每当我将$ deps传递给我的View时,我总能获得完整的模型,好像从来没有任何Collection。
return $deps;
return view('abteilungen',['departments'=>$deps]);
我做错了什么?
修改 我尝试使用
return view('abteilungen',['departments'=>$deps->toArray($request)]);
但删除了Laravel提供的分页信息,以及
的访问权限$departments->links()
在我的视图中无法正常工作。
答案 0 :(得分:0)
您可以使用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);
答案 1 :(得分:0)
试试这个,我认为你需要在eagar加载之前实际选择公司列:
Department::where('active',1)
->whereHas('company',function($query){
$query->where('active',1);
})
->with(['company' => function ($query) {
$query->select('id', 'title');
}])
->paginate(10);
答案 2 :(得分:0)
也许 https://laravel-livewire.com/docs/2.x/pagination 会帮助你。
我这样做了:
view('myview')->with('data', $eloquentData->toArray());
对我来说一切正常。