О web-разработке
и даже немного больше...

Ограничение выборки (LIMIT) данных в Laravel

В Laravel для работы с таблицами БД мы используем модели, и представлены они для нас в виде отдельных сущностей согласно ORM. Для самого же сервера БД суть работы с ней не меняется. Соответственно, если мы составляем ресурсоемкие запросы в Laravel, то нагрузка на сервер происходит такая же, как если бы мы это делали путём SQL запроса напрямую. Работая с большим набором данных рационально при запросе выполнять ограничение на количество строк, возвращаемых при запросе.

В Laravel мы можем использовать методы limit() и offset() при выборке данных, назначение которых с точки зрения SQL запроса очевидно.

News::limit(10);

//или

\DB:table('news')->limit(10);

Таким образом, вы можем выбрать первые 10 записей из таблицы БД. В результате запрос в БД будет выглядеть следующим образом:

select  * `table` limit 10

Ограничить запрос мы так же можем методом take() и skip()

Методы take() и skip() могут так же выполнить ограничение и смещение строк при запросе. В качестве параметра каждый из этих методов так же принимает целое число.

News::skip(10)->take(10);

// или

\DB::table('news')->skip(10)->take(10);

В результате мы получаем такой запрос в базу данных:

select  * `table` limit 10 offset 10

Как можно понять из запроса — limit выставляет ограничение по количеству строк, а offset выставляет смещение на указанное количество строк. Теперь можно посмотреть на примере использования их в контроллерах.

Пример 1 – Выборка 10 записей, используя смещение offset

Давайте предположим, что у нас есть таблица, в которой хранятся 100 записей. В нашем примере нам следует выбрать 10 записей и задать смещение равное 10. В результате у нас получиться такой вот код:

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\User;
  
class NewsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
	public function index()
	{
		$News = News::offset(10)->limit(10); 
	}
}

В результате в БД пойдёт запрос следующего вида:

select * from `news` limit 10 offset 10

Пример 2 – Выборка 10 записей с помощью методов take и skip

Получить похожий результат, как и в предыдущем примере, мы можем с помощью методов take() и skip(). Назначение этих методов вам уже известно. В итоге в контроллере мы получим следующий код:

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\User;
  
class NewsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
	public function index()
	{
		$News = News::take(10)->skip(10);

		// или
		DB::table('news')->take(10)->skip(10)->first();
	}
}

Аналогичным образом в базу придёт запрос следующего вида:

select `news`.`*` from `news` limit 10 offset 10

Как вы можете заметить методы разные, но результат вы получите одинаковый. Ограничение запросов используется практически на каждом сайте, где происходит работа с таблицами. Это может быть вывод список новостей, товаров с постраничной навигацией, либо вывод последних записей на страницах.

Опубликован: 13.11.2022 г.

См. также:

Как просмотреть SQL запрос в Eloquent Laravel?
Как объявить переменную в шаблоне Laravel Blade?
Проверка на пустоту коллекций Eloquent в Laravel
Как получить URL текущей страницы в Laravel?
Как вывести роуты Laravel в отдельный файл?
Как получить случайные записи из БД в Laravel?
Как перенести Laravel на боевой сервер?
Команды Artisan для сброса кэша в Laravel

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта