Метод offset
Метод offset применяется к запросу Eloquent или Query Builder для указания смещения выборки. Он позволяет пропустить определённое количество записей и начать выдачу с нужной позиции. В качестве параметра метод принимает целое положительное число, указывающее, сколько записей необходимо пропустить. Метод часто используется вместе с методом limit для реализации пагинации.
Синтаксис
<?php
Model::offset($value)->limit($value);
?>
Пример 1
Давайте получим список статей, пропустив первые 5 записей:
<?php
use App\Models\Article;
$res = Article::offset(5)->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 6"
"article 7"
"article 8"
Пример 2
Давайте получим первые 10 статей, начиная с 6-й записи (пропустим 5 записей и возьмём 10):
<?php
use App\Models\Article;
$res = Article::offset(5)->limit(10)->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 6"
"article 7"
"article 8"
"article 9"
"article 10"
Пример 3
Давайте реализуем пагинацию с помощью методов offset и limit, где пользователь находится на второй странице, и на каждой странице показывается по 5 записей:
<?php
use App\Models\Article;
$page = 2;
$perPage = 5;
$offset = ($page - 1) * $perPage;
$res = Article::offset($offset)
->limit($perPage)
->orderBy('id')
->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 6"
"article 7"
"article 8"
"article 9"
"article 10"
Пример 4
Давайте используем метод offset в сочетании с условием where и сортировкой:
<?php
use App\Models\Article;
$res = Article::where('status', 'published')
->orderBy('created_at', 'desc')
->offset(3)
->limit(4)
->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 4"
"article 3"
"article 2"
"article 1"