【问题标题】:Method Illuminate\Database\Eloquent\Collection::skip does not exist - Laravel 5.8方法 Illuminate\Database\Eloquent\Collection::skip 不存在 - Laravel 5.8
【发布时间】:2020-03-25 21:25:12
【问题描述】:

我使用的是 laravel 5.8

我有这个封闭的查询:

$user = 用户::get();

然后这不起作用:

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

发生这种情况:

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

告诉我应该怎么做才能不出错?

【问题讨论】:

  • 你到底想达到什么目的
  • @Abiola 正在尝试对已关闭的查询进行分页。

标签: php laravel collections pagination skip


【解决方案1】:

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\Support\Collection变成Illuminate\Database\Eloquent\Collectioninherents。

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

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

【讨论】:

    【解决方案2】:

    不确定您要达到的目标,但这应该可行

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

    这也有效

    $users = DB::table('users')->skip(20)->take(10)->get();
    

    【讨论】:

    • 兄弟,我想在关闭查询后执行此操作。
    • 抱歉,“对已关闭的查询进行分页”是什么意思
    • 通常如果你想分页你会做这样的事情User::all()->paginate(10);你想添加一些特殊条件吗?
    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2021-09-08
    相关资源
    最近更新 更多