Я заметил, что в Laravel, когда цепочка skip()
Вы также должны использовать take()
также. Я хочу пропустить первые n строк, а остальные взять. Метод take допускает только целые числа. Как я могу сделать это, не прибегая к каким-то хитрым приемам, таким как указание большого числа для take?
В основном, с каждым OFFSET, LIMIT должен быть предоставлен для работы mysql. Поэтому нет способа сделать это без разделения предела. Нам нужно немного php mojo, чтобы работать здесь.
Допустим, у нас есть Eloquent Class Attendance
, Вот что должно работать:
//Getting count
$count = Attendance::count();
$skip = 5;
$limit = $count - $skip; // the limit
$collection = Attendance::skip($skip)->take($limit)->get();
Я думаю, что это не очень хороший ответ, потому что вы вынуждены сделать два запроса, правильный путь будет:
$collection = Attendance::skip($skip)->take($limit)->get();
$collection.shift();
Вы можете увидеть больше о коллекциях Вот
Если вы используете MySQL и не хотите иметь 2 запроса, чтобы получить максимальное количество строк, вы можете использовать максимальное значение INT PHP в качестве take()
параметр, например take(PHP_INT_MAX)
,
Это потому, что Laravel Query Grammar бросает ограничение на целое число. Таким образом, вы не можете использовать большее число, чем это.
От MySQL документация по LIMIT:
Чтобы извлечь все строки от определенного смещения до конца результирующего набора, вы можете использовать некоторое большое число для второго параметра.
Например:
\App\User::skip(10)->take(PHP_INT_MAX)->get();