【问题标题】:laravel pass paginate collection to viewlaravel 通过分页集合来查看
【发布时间】:2018-07-29 12:50:25
【问题描述】:

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

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

在我看来是行不通的。

【问题讨论】:

  • 也许可以试试['departments' => $deps->toArray()]
  • 我编辑了这个问题,按照帖子中的说明进行了尝试
  • 您必须了解一件事,您无权访问linksCollection 对象上的任何其他功能,因为您返回的是一个数组,因此是toArray,所以你想返回 CollectionArrayof 对象吗?
  • 我想返回一个集合,因为我需要分页信息和链接

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


【解决方案1】:

您可以只使用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);

【讨论】:

  • 感谢您的回答,但返回给我的错误是在部门表中找不到 company.id 和 company.title:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'company.id' in 'field list' (SQL: select 'id', 'title', 'company'.'id', 'company'.'title' from 'departments' where 'active' = 1 and exists (select * from 'companies' where 'departments'.'company_id' = 'companies'.'id' and 'active' = 1) limit 10 offset 0)
  • 它仍然返回同样奇怪的错误,但它也在子查询中显示select * from 'companies',尽管我们只选择 id & title
  • 如果您使用select 而不是将数组传递给paginate 怎么样,试试我编辑的答案
  • 什么都没改变,仍然出现上述错误如果我只选择id & title,然后我得到一个名为company的字段,但它是null
【解决方案2】:

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

Department::where('active',1)
   ->whereHas('company',function($query){
       $query->where('active',1);
   })
    ->with(['company' => function ($query) {
        $query->select('id', 'title');
   }])
   ->paginate(10);

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 2013-02-20
      • 2020-09-10
      • 2015-06-06
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多