0

我想在我看来用相应的公司对所有部门进行分页。因此,我创建了相应的模型并仅选择所需的字段,我创建了一个集合。在我的控制器中,我创建了这个集合的一个实例,并希望将它传递给我的视图。这是我的控制器:

$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()

在我看来是行不通的。

4

3 回答 3

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);
于 2018-02-19T12:26:21.310 回答
0

试试这个,我认为您需要在 eagar 加载之前实际选择公司列:

Department::where('active',1)
   ->whereHas('company',function($query){
       $query->where('active',1);
   })
    ->with(['company' => function ($query) {
        $query->select('id', 'title');
   }])
   ->paginate(10);
于 2018-02-21T20:08:16.883 回答
0

也许https://laravel-livewire.com/docs/2.x/pagination会帮助你。我这样做了: view('myview')->with('data', $eloquentData->toArray());一切对我来说都很好。

于 2021-06-02T17:44:42.957 回答