Laravel 5.3 Pagination - Collection.php第432行中的ErrorException

时间:2016-11-24 12:32:15

标签: php laravel pagination syntax-error

每次我尝试设置我的分页时:

  

缺少Illuminate \ Support \ Collection :: get()

的参数1

我的控制器:

public function index()
{
    $products = DB::table('products')
        ->where('product_group_id', '=', 1)
        ->paginate(15)
        ->get();

    return view('product.index', [
        'products' => $products,
    ]);
}

我的观点:

{{ $products->links() }}

这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

此处您不需要->get()->paginate()从数据库中获取您的记录,并返回这15个项目的集合。

当您在此处运行->get()时,您尝试在返回的集合上运行它,该集合需要$key并用于从集合中获取特定项目。

你应该这样做:

$products = DB::table('products')
    ->where('product_group_id', '=', 1)
    ->paginate(15);

return view('product.index', [
    'products' => $products,
]);

或与Eloquent

$product = Product::where('product_group_id', '=', 1)
    ->paginate(15);

return view('product.index', [
    'products' => $products,
]);

注意:我已经在paginate()调用之前放置了过滤器,以确保where子句是数据库查询的一部分,而不是尝试过滤生成的集合/分页器

答案 1 :(得分:0)

当您在paginate()对象You will get an instance of \Illuminate\Pagination\LengthAwarePaginator上调用Illuminate\Database\Query\Builder方法时。它本身没有get() - 方法,但它扩展的Illuminate\Pagination\AbstractPaginator有一个magic __call() function,它将调用转发给基础Collection。

现在,Illuminate\Support\Collection 执行 have a get() method,但它会将您想要从Collection中获取的元素的键作为参数,因此会出现错误。

现在,我想你真正希望通过页码链接实现标准分页,并且#34;转发"和"返回"纽扣。如果是这样,您应该坚持使用documentation:按照您的方式获取数据,只需忽略get(),然后在视图中显示here

编辑:请阅读您收到的Method links does not exist错误。这确实很奇怪。 Builder::paginate()肯定会返回LengthAwarePaginator的实例,该实例本身肯定有links()方法。

是否还有一些与此问题相关的代码尚未向我们展示?也许在你看来?