laravel传递paginate集合来查看

时间:2018-02-19 09:59:58

标签: laravel model eloquent laravel-collection laravel-views

我想在我看来将所有部门与相应的公司分页。因此,我创建了相应的模型,并仅选择了我创建集合所需的字段。在我的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()

在我的视图中无法正常工作。

3 个答案:

答案 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()); 对我来说一切正常。