Laravel Offset不抵消和/或跳过不跳过

问题描述 投票:1回答:2

我有一个数据库,我想跳过/偏移前3行。

    $data = Data::orderBy('created_at','desc')->skip(3)->paginate(1);
    $data = Data::orderBy('created_at','desc')->offset(3)->paginate(1);

两个查询都从开始返回所有结果。谁能帮我这个?

谢谢。

laravel eloquent laravel-5.7
2个回答
2
投票

skip似乎不适用于paginate。你可以做的是使用whereNotIn排除行。

$data = Data::orderBy('created_at','desc')->whereNotIn('id', [1,2,3])->paginate(1);

如果你不知道id,你可以查询并使用结果。

$id = Data::orderBy('created_at','desc')->take(3)->pluck('id');
$data = Data::orderBy('created_at','desc')->whereNotIn('id', $id)->paginate(1);

0
投票

你不能一起使用paginate()skip()。你能做的是:

$data = Data::orderBy('created_at','desc')->skip(3)->take(10)->get();并根据您的自定义实现更新这些值跳过并获取值。

如果你真的想跳过前3行并且永远不会在分页中使用它们,你可以这样做:

$dataToEliminate = Data::orderBy('created_at','desc')->take(3)->select('id')->pluck('id');

$data = Data::whereNotIn('id', $dataToEliminate)->orderBy('created_at','desc')->skip(3)->paginate(1);

请参阅documentation以供参考。

© www.soinside.com 2019 - 2024. All rights reserved.