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