Laravel Eloquent跳过n,拿走所有?

时间:2014-12-13 09:08:25

标签: php laravel eloquent offset

我注意到在Laravel链接skip()时,您也必须使用take()。我想跳过前n行,但剩下的就是。 take方法只允许整数如何在不使用某些hacky技巧的情况下执行此操作,例如指定一个大数字?

3 个答案:

答案 0 :(得分:21)

基本上,对于每个OFFSET,必须提供一个LIMIT才能使mysql正常工作。因此,没有分割限制就没有办法做到这一点。我们需要一些php mojo才能在这里工作。

假设我们有一个名为Attendance的雄辩类。这是应该工作的:

//Getting count
$count = Attendance::count();
$skip = 5;
$limit = $count - $skip; // the limit
$collection = Attendance::skip($skip)->take($limit)->get();

答案 1 :(得分:2)

我认为这不是一个好的答案,因为你强迫做两个查询,正确的方法是:

$collection = Attendance::skip($skip)->take($limit)->get();
$collection.shift();

您可以查看有关馆藏here

的更多信息

答案 2 :(得分:1)

如果您使用的是MySQL,并且您不希望有2个查询来获取最大行数,则可以将PHP最大INT值用作take()参数,例如take(PHP_INT_MAX)

这是因为Laravel查询语法casts the limit to integer。因此,您不能使用更大的数字。

来自MySQL documentation on LIMIT

  

要检索从某个偏移量到结果集末尾的所有行,可以对第二个参数使用较大的数字。

例如:

\App\User::skip(10)->take(PHP_INT_MAX)->get();