Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmEqMQB 166 of 252 menu
◀ ▶

Конструктор запросов в моделях Eloquent в Laravel

В прошлом уроке мы получали данные через Post::all() - сразу все строки таблицы. На практике так делают редко: нужны записи с условием, часть списка для пагинации, выборка по нескольким id.

Для этого в Laravel есть построитель запросов. Мы уже разбирали его отдельно: цепочка методов после DB::table и в конце get для получения результата. Тот же набор методов доступен и у моделей Eloquent.

Разница только в начале цепочки. Вместо имени таблицы строкой пишут имя модели. Запрос по-прежнему строится по шагам, а в коллекции оказываются объекты модели - не просто строки из базы.

Сравним один и тот же запрос двумя способами - через DB::table и через модель:

<?php // через построитель запросов $posts = DB::table('posts') ->where('id', '>', 3) ->get(); // то же самое через модель $posts = Post::where('id', '>', 3)->get(); ?>

Синтаксис после первого вызова совпадает. Дальше в уроке все примеры через модели - так принято в контроллерах с Eloquent.

Условие where

Метод where отбирает строки по условию на колонку. Три аргумента: имя поля, оператор и значение. Если оператор =, его можно не писать - Laravel подставит сам.

Получим пользователей с возрастом 30 лет:

<?php $users = User::where('age', 30)->get(); dump($users); ?>

Условие с оператором сравнения - например, посты с id больше 3:

<?php $posts = Post::where('id', '>', 3)->get(); dump($posts); ?>

Методы можно вызывать цепочкой. Добавим второе условие - только опубликованные посты с большим id:

<?php $posts = Post::where('id', '>', 3) ->where('published', 1) ->get(); dump($posts); ?>

Диапазон whereBetween

Когда значение должно попасть в интервал «от и до», удобнее whereBetween, чем два отдельных where. Вторым аргументом передают массив из двух границ.

Выберем пользователей с зарплатой от 100 до 300:

<?php $users = User::whereBetween('salary', [100, 300])->get(); dump($users); ?>

Метод whereNotBetween работает наоборот - значение должно быть вне указанного промежутка.

Сдвиг skip и лимит take

Иногда нужна не вся таблица, а «страница» записей: пропустить первые несколько строк и взять следующие. Для этого служат skip и take - аналог OFFSET и LIMIT в SQL.

Нумерация с нуля: skip(3) пропускает три записи, выборка начинается с четвёртой. Получим всех пользователей, начиная с четвёртого:

<?php $users = User::skip(3)->get(); dump($users); ?>

Чтобы ограничить число строк, добавляют take. Пять пользователей, начиная с четвёртого:

<?php $users = User::skip(3)->take(5)->get(); dump($users); ?>

skip и take часто комбинируют с where - сначала фильтр, потом срез списка.

Список значений whereIn

Если нужно проверить, что поле равно одному из нескольких значений, используют whereIn. Второй аргумент - массив допустимых значений. Так короче, чем писать длинную цепочку orWhere.

Получим посты с id 1, 3, 4 или 5:

<?php $posts = Post::whereIn('id', [1, 3, 4, 5])->get(); dump($posts); ?>

Метод whereNotIn исключает перечисленные значения - все записи, кроме указанных id.

Практические задачи

Получите всех юзеров с возрастом 30.

Получите всех юзеров с зарплатой от 100 до 300.

Получите всех юзеров, начиная с четвертого.

Получите всех юзеров, начиная с четвертого, 5 штук.

Получите всех юзеров с id, равным 1, 3, 4 или 5.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить