首页 > 解决方案 > 方法 Illuminate\Database\Eloquent\Collection::skip 不存在 - Laravel 5.8

问题描述

我正在使用 laravel 5.8

我有这个封闭的查询:

$user = 用户::get();

然后这不起作用:

$user->skip(20)->take(10);

发生这种情况:

方法 Illuminate\Database\Eloquent\Collection::skip 不存在。

告诉我我应该怎么做才能做到这一点而不会出错?

标签: phplaravelcollectionspaginationskip

解决方案


Tl; dr对于 5.8,解决方案是使用slice();所以它变成$user->slice(20)->take(10);

如果您想知道为什么$users = User::skip(20)->take(10)->get();有效,但下面的代码不起作用。

$user = User::get();
$user->skip(20)->take(10);

这是因为,当您使用Eloquent查询数据库时,许多可链接的方法(例如:whereskip许多其他方法)将转换为查询构建器,但是当您调用get它时,它将把整个结果从数据库返回到您的本地内存,所以它变成了Illuminate\Database\Eloquent\Collection固有的从Illuminate\Support\Collection.

对于5.8Collection没有skip办法。所以你得到那个错误。

它是从 6 开始添加的,所以你为了实现你想要的,要么更新到 6 + 要么使用slice().


推荐阅读