- Laravel Framework Russian Community
- Введение
- Настройка
- Настройка SQL Server
- SQL Server Configuration
- Подключения для чтения/записи
- Запросы на чистом SQL
- SQL запросы
- Именованные параметры запроса
- Вставка
- Обновление
- Удаление
- Иные запросы к БД
- Постобработчик запросов
- Транзакции
- Ручные транзакции
- Использование нескольких подключений к БД
- Основы работы с базами данных
- Введение
- Настройка
- Соединения для чтения и записи
- Использование нескольких соединений с БД
- Выполнение сырых SQL-запросов
- Прослушивание событий запросов
- Транзакции
- Журнал запросов
- Комментарии (2)
- Конструктор запросов
- Введение
- Получение результатов
- Получение результатов из таблицы «по кускам»
- Агрегатные функции
- Выборка ( SELECT )
- Сырые выражения
- Объединения ( JOIN )
- Слияние ( UNION )
- Условия WHERE
- Группировка условий
- Проверка на существование
- JSON фильтрация ( WHERE )
- Упорядочивание, группировка, предел и смещение
- Условное применение условий
- Вставка ( INSERT )
- Обновление ( UPDATE )
- Обновление JSON-столбцов
- Increment и Decrement
- Удаление ( DELETE )
- Пессимистическая блокировка
- Комментарии (4)
Laravel Framework Russian Community
Введение
Laravel делает работу с БД чрезвычайно простой благодаря возможности работы на трех уровнях: на чистом SQL, через конструктор запросов fluent query builder, через объектные модели Eloquent ORM. Laravel поддерживает четыре СУБД:
Настройка
Файл настройки БД находится в config/database.php . В нем можно опеределить все подключения к БД, задать подключение по умолчанию. Также в файле есть примеры для всех СУБД. Конфигурация по умолчанию готова для работы с виртуальной машиной Laravel Homestead, которая удобна для разработки на локальной машине. Конечно, вы можете менять конфигурацию в файле под ваши нужды.
Настройка SQL Server
SQL Server Configuration
Laravel поддерживает SQL Server «из коробки», однако, в файл настройки требуется добавить параметры подключения:
Подключения для чтения/записи
Если необходимо настроить раздельные подключения для чтения (SELECT) и изменения данных (INSERT, UPDATE, and DELETE), то Laravel позваоляет это сделать на одном дыхании. Соответствующее подключение будет автоматически использоваться при работе с БД любым из способов: чистый SQL, конструктор запросов, объектные модели (Eloquent ORM)
Пример настройки раздельных подключений для чтения/записи:
Обратите внимание, что в массив настройки были добавлены два ключа: read and write . Каждый из них является массивом, в котором содержится единственный ключ: host . Остальные опции подключений являются общими и заданы непосредственно в массиве mysql .
Таким образом, нам нужно будет добавлять параметры в массивы read и write , только, если мы хотим переписать значения этих параметров в основном массиве. Так в приведенном примере хост 192.168.1.1 будет использоваться для чтения, а 192.168.1.2 для записи. Учетные данные, префикс, кодировка и все другие опции в массиве mysql будут общими для обоих подключений.
Запросы на чистом SQL
После настройки подключения к БД вы можете делать запросы, используя фасад DB . Фасад предоставляет методы для каждого типа запроса: select , update , insert , delete , и statement .
SQL запросы
Для простого запроса мы можем использовать метод select фасада DB :
Первый аргумент метода select — это строка, содержащая запрос на чистом SQL, второй аргумент — массив со значениями, подставляемыми в запрос. Обычно эти значения используется в выражении where . Такая привязка параметров защищает от SQL инъекций.
Метод select всегда возвращает массив. Каждое значение в массиве будет объектом PHP StdClass , предоставляющим доступ к значениям результата запроса:
Именованные параметры запроса
Вместо использования ? , указывающего на привязку параметра к запросу, вы можете использовать имя:
Вставка
Для вставки записей в БД используется метод insert фасада DB . Использование метода подобно методу select , где первый аргумент — запрос на SQL, второй — параметры:
Обновление
Метод update используется для обновления записей в БД. Возвращает количество обновленных строк:
Удаление
Метод delete используется для удаления записей из таблицы. Возвращает количество удаленных строк:
Иные запросы к БД
Используйте метод statement фасада DB :
Постобработчик запросов
Если вы хотите получать каждый SQL запрос, выполненый приложением, используйте метод listen . Этот метод полезен для логирования и отладки запросов. Регистрация постобработчика в service provider:
Транзакции
Для использования транзакций предназначен метод transaction фасада DB . Если будет брошено исключение в функции-замыкании, то транзакция будет отменена. Если транзакция успешна, то она будет автоматически завершена(committed). Вам не требуется вручную делать откат или завершение (committing) при использовании этого метода:
Ручные транзакции
Если требуется начать транзакцию вручную и иметь полный контроль над откатами и завершениями используйте метод beginTransaction фасада DB :
Примечание: Используйте перечисленные методы для ручного управления транзакциями при работе с query builder и Eloquent ORM.
Использование нескольких подключений к БД
При использовании нескольких подключений доступ к каждому из них можно получить через метод connection . Методу необходимо передать имя подключения, которое должно соответствовать одному из имен в файле настройки БД config/database.php :
Вы также можете получить низкоуровневый объект PDO для текущего подключения:
Источник
Основы работы с базами данных
Database: Getting Started → Community +1 015 31 мая 2015
Введение
В Laravel можно чрезвычайно просто взаимодействовать с БД на различных «движках» , будь то сырой SQL, гибкий построитель запросов или Eloquent ORM . На данный момент Laravel поддерживает четыре системы баз данных:
Настройка
Настройки работы с БД хранятся в файле config/database.php . Здесь вы можете указать все используемые вами соединения к БД, а также задать соединение по умолчанию. Примеры настройки большинства поддерживаемых видов подключений находятся в этом же файле.
По умолчанию образец настройки окружения Laravel подготовлен для использования с Laravel Homestead — удобной виртуальной машиной для Laravel-разработки на вашей локальной машине. Разумеется, вы можете изменить эти настройки для работы с вашей локальной БД.
Настройка SQLite
После создания новой базы данных SQLite при помощи команды sh touch database/database.sqlite , вы можете легко настроить переменные вашей среды для этой новой базы данных, используя её абсолютный путь:
Настройка SQL Server
Laravel поддерживает работу с SQL Server из коробки, надо лишь добавить настройку подключения к БД в ваш файл настроек config/database.php :
Соединения для чтения и записи
Иногда вам может понадобиться использовать разные подключения к базе данных: одно для запросов SELECT , а другое для запросов INSERT , UPDATE и DELETE . В Laravel это делается очень просто, и всегда будет использоваться соответствующее соединение, используете ли вы сырые запросы, построитель запросов или Eloquent ORM .
Чтобы увидеть, как должны быть настроены соединения чтения/записи, давайте посмотрим на этот пример:
Обратите внимание, что в массив настроек были добавлены два элемента: sql ‘read’ и sql ‘write’ . Оба элемента представляют собой массив с одним элементом sql ‘host’ . Остальные параметры БД для подключений чтения/записи будут заимствованы из основного массива sql ‘mysql’ .
Вам стоит размещать элементы в массивах PHP read и PHP write , только если вы хотите переопределить их значения из основного массива. Таким образом, в этом случае, 192.168.1.1 будет использоваться как хост для подключения «чтения» , а 192.168.1.2 — для подключения «записи» . Учётные данные для БД, префикс, набор символов, и все другие параметры основного массива sql ‘mysql’ будут использованы для обоих подключений.
Использование нескольких соединений с БД
При использовании нескольких соединений с БД вы можете получить доступ к каждому из них через метод PHP connection () фасада DB . Передаваемое в этот метод имя name должно соответствовать одному из перечисленных в файле config/database.php соединений:
Вы также можете получить низкоуровневый объект PDO для этого подключения методом PHP getPdo () :
Выполнение сырых SQL-запросов
Когда вы настроили соединение с базой данных, вы можете выполнять запросы, используя фасад DB . Этот фасад имеет методы для каждого типа запроса: select , update , insert , delete и statement .
Выполнение запроса SELECT
Чтобы выполнить базовый запрос, можно использовать метод PHP select () фасада DB :
Первый аргумент метода PHP select () — сырой SQL-запрос, второй — любые связки параметров для прикрепления к запросу. Обычно это значения ограничений условия where . Привязка параметров обеспечивает защиту от SQL-инъекций.
Метод PHP select () всегда возвращает массив результатов. Каждый результат в массиве — объект PHP StdClass , что позволяет вам обращаться к значениям результатов:
Использование привязки имён
Вместо использования знака вопроса ? для обозначения привязки параметров, вы можете выполнить запрос, используя привязку по имени:
Выполнение запроса INSERT
Чтобы выполнить запрос insert , можно использовать метод PHP insert () фасада DB . Как и PHP select () , данный метод принимает сырой SQL-запрос первым аргументом, а вторым — привязки:
Выполнение запроса UPDATE
Для обновления существующих записей в БД используется метод PHP update () , который возвращает количество изменённых записей:
Выполнение запроса DELETE
Для удаления записей из БД используется метод PHP delete () , который возвращает количество изменённых записей:
Выполнение запроса общего типа
Некоторые запросы к БД не возвращают никаких значений. Для операций такого типа можно использовать метод PHP statement () фасада DB :
Прослушивание событий запросов
Если вы хотите получать каждый выполненный вашим приложением SQL-запрос, используйте метод PHP listen () . Этот метод полезен для журналирования запросов и отладки. Вы можете зарегистрировать свой слушатель запросов в сервис-провайдере:
Транзакции
Для выполнения набора запросов внутри одной транзакции вы можете использовать метод PHP transaction () фасада DB . Если в замыкании транзакции произойдёт исключение, она автоматически откатится. А если замыкание выполнится успешно, транзакция автоматически применится к БД. Вам не стоит переживать об этом при использовании метода PHP transaction () :
Обработка взаимных блокировок
Метод PHP transaction () принимает второй необязательный аргумент, с помощью которого задаётся число повторных попыток транзакции при возникновении взаимной блокировки (англ. deadlock). После истечения этих попыток будет выброшено исключение:
Ручное использование транзакций
Если вы хотите запустить транзакцию вручную и иметь полный контроль над её откатом и применением, используйте метод PHP beginTransaction () фасада DB :
Вы можете откатить транзакцию методом PHP rollback () :
Наконец, вы можете применить транзакцию методом PHP commit () :
Методы фасада DB для транзакций также контролируют транзакции построителя запросов и Eloquent ORM .
Транзакция — особое состояние БД, в котором выполняемые запросы либо все вместе успешно завершаются, либо (в случае ошибки) все их изменения откатываются. Это позволяет поддерживать целостность внутренней структуры данных. К примеру, если вы вставляете запись о заказе, а затем в отдельную таблицу добавляете товары, то при неуспешном выполнении скрипта (в том числе падения веб-сервера, ошибки в запросе и пр. ) СУБД автоматически удалит запись о заказе и все товары, которые вы успели добавить — прим. пер.
Иногда вам может понадобиться переподключиться и вы можете сделать это так:
Если вам нужно отключиться от данной БД из-за превышения основного предела экземпляров PDO max_connections, используйте метод PHP disconnect () :
Журнал запросов
По умолчанию Laravel записывает все SQL-запросы, выполненные в рамках текущего запроса страницы. Однако в некоторых случаях — например, при вставке большого набора записей — это может быть слишком ресурсозатратно. Для подключения журнала вы можете использовать метод PHP enableQueryLog () :
Чтобы получить массив выполненных запросов, вы можете использовать метод PHP getQueryLog () :
Комментарии (2)
Файла app/config/database.php не существует, но есть config/database.php
Жаль что так никто и не ответил за 5 лет человеку.
Аббревиатура app стандартно означает весь путь до папки приложения, поэтому вместо app принято подставлять например /var/www/html и в этом случае указание файла конфигурации вполне себе уместно. Единственно что для обозначения что это аббревиатура чаще всего пишут @app
Источник
Конструктор запросов
Query Builder → Community +1 015 31 мая 2015
Введение
Конструктор запросов Laravel предоставляет удобный, выразительный интерфейс для создания и выполнения запросов к базе данных. Он может использоваться для выполнения большинства типов операций и работает со всеми поддерживаемыми СУБД .
Конструктор запросов Laravel использует привязку параметров к запросам средствами PDO для защиты вашего приложения от SQL-инъекций. Нет необходимости экранировать строки перед их передачей в запрос.
Получение результатов
Получение всех записей таблицы
Используйте метод PHP table () фасада DB для создания запроса. Метод PHP table () возвращает экземпляр конструктора запросов для данной таблицы, позволяя вам «прицепить» к запросу дополнительные условия и в итоге получить результат методом PHP get () :
Метод PHP get () возвращает объект Illuminate\Support\Collection (для версии 5.2 и ранее — массив) c результатами, в котором каждый результат — это экземпляр PHP-объекта StdClass . Вы можете получить значение каждого столбца, обращаясь к столбцу как к свойству объекта:
Получение одной строки/столбца из таблицы
Если вам необходимо получить только одну строку из таблицы БД, используйте метод PHP first () . Этот метод вернёт один объект StdClass :
Если вам не нужна вся строка, вы можете извлечь одно значение из записи методом PHP value () . Этот метод вернёт значение конкретного столбца:
Получение списка всех значений одного столбца
Если вы хотите получить массив значений одного столбца, используйте метод PHP pluck () . В этом примере мы получим коллекцию (для версии 5.2 и ранее — массив) названий ролей:
Вы можете указать произвольный ключ для возвращаемой коллекции (для версии 5.2 и ранее — массива):
Если вы хотите получить массив значений одного столбца, используйте метод PHP lists () . В этом примере мы получим массив названий ролей:
Вы можете указать произвольный ключ для возвращаемого массива:
Получение результатов из таблицы «по кускам»
Если вам необходимо обработать тысячи записей БД, попробуйте использовать метод PHP chunk () . Этот метод получает небольшой «кусок» результатов за раз и отправляет его в замыкание для обработки. Этот метод очень полезен для написания Artisan-команд, которые обрабатывают тысячи записей. Например, давайте обработаем всю таблицу users «кусками» по 100 записей:
Вы можете остановить обработку последующих «кусков» вернув false из замыкания:
Агрегатные функции
Конструктор запросов содержит множество агрегатных методов, таких как count, max, min, avg и sum. Вы можете вызывать их после создания своего запроса:
Разумеется, вы можете комбинировать эти методы с другими условиями:
Выборка ( SELECT )
Указание столбцов для выборки
Само собой, не всегда вам необходимо выбрать все столбцы из таблицы БД. Используя метод PHP select () вы можете указать необходимые столбцы для запроса:
Метод PHP distinct () позволяет вернуть только отличающиеся результаты:
Если у вас уже есть экземпляр конструктора запросов и вы хотите добавить столбец к существующему набору для выборки, используйте метод PHP addSelect () :
Сырые выражения
Иногда вам может понадобиться использовать уже готовое SQL-выражение в вашем запросе. Такие выражения вставляются в запрос напрямую в виде строк, поэтому будьте внимательны и не допускайте возможностей для SQL-инъекций! Для создания сырого выражения используйте метод PHP DB :: raw () :
Объединения ( JOIN )
Объединение INNER JOIN
Конструктор запросов может быть использован для объединения данных из нескольких таблиц через PHP JOIN . Для выполнения обычного объединения «inner join» , используйте метод PHP join () на экземпляре конструктора запросов. Первый аргумент метода PHP join () — имя таблицы, к которой необходимо присоединить другие, а остальные аргументы указывают условия для присоединения столбцов. Как видите, вы можете объединять несколько таблиц одним запросом:
Объединение LEFT JOIN
Для выполнения объединения «left join» вместо «inner join» , используйте метод PHP leftJoin () . Этот метод имеет ту же сигнатуру, что и метод PHP join () :
Объединение CROSS JOIN
Для выполнения объединения CROSS JOIN используйте метод PHP crossJoin () с именем таблицы, с которой нужно произвести объединение. CROSS JOIN формирует таблицу перекрестным соединением (декартовым произведением) двух таблиц:
Сложные условия объединения
Вы можете указать более сложные условия для объединения. Для начала передайте замыкание вторым аргументом метода PHP join () . Замыкание будет получать объект JoinClause , позволяя вам указать условия для объединения:
Если вы хотите использовать стиль «where» для ваших объединений, то можете использовать для этого методы PHP where () и PHP orWhere () . Вместо сравнения двух столбцов эти методы будут сравнивать столбец и значение:
Слияние ( UNION )
Конструктор запросов позволяет создавать слияния двух запросов вместе. Например, вы можете создать начальный запрос и с помощью метода PHP union () слить его со вторым запросом:
Также существует метод PHP unionAll () с аналогичными параметрами.
Условия WHERE
Простые условия WHERE
Для добавления в запрос условий where используйте метод PHP where () на экземпляре конструктора запросов. Самый простой вызов PHP where () требует три аргумента. Первый — имя столбца. Второй — оператор (любой из поддерживаемых базой данных). Третий — значение для сравнения со столбцом.
Например, вот запрос, проверяющий равенство значения столбца «votes» и 100:
Для удобства, если вам необходимо просто проверить равенство значения столбца и данного значения, вы можете передать значение сразу вторым аргументом метода PHP where () :
Разумеется, вы можете использовать различные другие операторы при написании условия where :
В функцию PHP where () также можно передать массив условий:
Условия ИЛИ
Вы можете сцепить вместе условия where , а также условия or в запросе. Метод PHP orWhere () принимает те же аргументы, что и метод PHP where () :
Дополнительные условия WHERE
В интервале
Метод PHP whereBetween () проверяет, что значения столбца находится в указанном интервале:
Вне интервала
Метод PHP whereNotBetween () проверяет, что значения столбца находится вне указанного интервала:
Фильтрация по совпадению с массивом значений
Метод PHP whereIn () проверяет, что значения столбца содержатся в данном массиве:
Метод PHP whereNotIn () проверяет, что значения столбца не содержатся в данном массиве:
Поиск неустановленных значений ( NULL )
Метод PHP whereNull () проверяет, что значения столбца равны PHP NULL :
Метод PHP whereNotNull () проверяет, что значения столбца не равны PHP NULL :
whereDate / whereMonth / whereDay / whereYear
Метод PHP whereDate () служит для сравнения значения столбца с датой:
Метод PHP whereMonth () служит для сравнения значения столбца с месяцем в году:
Метод PHP whereDay () служит для сравнения значения столбца с днём месяца:
Метод PHP whereYear () служит для сравнения значения столбца с указанным годом:
Динамические условия WHERE
Вы можете использовать даже «динамические» условия where для гибкого построения операторов, используя магические методы:
whereColumn
Для проверки на совпадение двух столбцов можно использовать метод PHP whereColumn () :
В метод также можно передать оператор сравнения:
В метод PHP whereColumn () также можно передать массив с несколькими условиями. Эти условия будут объединены оператором AND :
Группировка условий
Иногда вам нужно сделать выборку по более сложным параметрам, таким как «существует ли» или вложенная группировка условий. Конструктор запросов Laravel справится и с такими запросами. Для начала посмотрим на пример группировки условий в скобках:
Как видите, передав замыкание в метод PHP orWhere () , мы дали конструктору запросов команду, начать группировку условий. Замыкание получит экземпляр конструктора запросов, который вы можете использовать для задания условий, поместив их в скобки. Приведённый пример выполнит такой SQL-запрос:
Проверка на существование
Метод PHP whereExists () позволяет написать SQL-условие where exists . Метод PHP whereExists () принимает в качестве аргумента замыкание, которое получит экземпляр конструктора запросов, позволяя вам определить запрос для помещения в условие «exists» :
Этот пример выполнит такой SQL-запрос:
JSON фильтрация ( WHERE )
Laravel также поддерживает запросы для столбцов типа JSON в тех БД, которые поддерживают тип столбцов JSON. На данный момент это MySQL 5.7 и Postgres. Для запроса JSON столбца используйте оператор -> :
Упорядочивание, группировка, предел и смещение
orderBy
Метод PHP orderBy () позволяет вам отсортировать результат запроса по заданному столбцу. Первый аргумент метода PHP orderBy () — столбец для сортировки по нему, а второй — задаёт направление сортировки и может быть либо asc , либо desc :
latest / oldest
Методы PHP latest () и PHP oldest () позволяют легко отсортировать результаты по дате. По умолчанию выполняется сортировка по столбцу created_at . Или вы можете передать имя столбца для сортировки по нему:
inRandomOrder
Для сортировки результатов запроса в случайном порядке можно использовать метод PHP inRandomOrder () . Например, вы можете использовать этот метод для выбора случайного пользователя:
groupBy / having / havingRaw
Методы PHP groupBy () и PHP having () используются для группировки результатов запроса. Сигнатура метода PHP having () аналогична методу PHP where () :
Метод PHP havingRaw () используется для передачи сырой строки в условие having . Например, мы можем найти все филиалы с объёмом продаж выше $2,500:
skip / take
Для ограничения числа возвращаемых результатов из запроса или для пропуска заданного числа результатов в запросе используются методы PHP skip () и PHP take () :
Или вы можете использовать методы PHP limit () и PHP offset () :
Условное применение условий
Иногда необходимо применять условие к запросу, только если выполняется какое-то другое условие. Например, выполнять оператор PHP where , только если нужное значение есть во входящем запросе. Это можно сделать с помощью метода PHP when () :
Метод PHP when () выполняет данное замыкание, только когда первый параметр равен PHP true . Если первый параметр равен PHP false , то замыкание не будет выполнено.
Вы можете передать ещё одно замыкание третьим параметром метода PHP when () . Это замыкание будет выполнено, если первый параметр будет иметь значение PHP false . Для демонстрации работы этой функции мы используем её для настройки сортировки по умолчанию для запроса:
Вставка ( INSERT )
Конструктор запросов предоставляет метод PHP insert () для вставки записей в таблицу БД. Метод PHP insert () принимает массив имён столбцов и значений:
Вы можете вставить в таблицу сразу несколько записей одним вызовом PHP insert () , передав ему массив массивов, каждый из которых — строка для вставки в таблицу:
Автоинкрементные ID
Если в таблице есть автоинкрементный ID, используйте метод PHP insertGetId () для вставки записи и получения её ID:
При использовании метода PHP insertGetId () для PostgreSQL автоинкрементное поле должно иметь имя PHP id . Если вы хотите получить ID из другого поля таблицы, вы можете передать его имя вторым аргументом.
Обновление ( UPDATE )
Разумеется, кроме вставки записей в БД конструктор запросов может и изменять существующие строки с помощью метода PHP update () . Метод PHP update () , как и метод PHP insert () , принимает массив столбцов и пар значений, содержащих столбцы для обновления. Вы можете ограничить запрос PHP update () условием PHP where () :
Обновление JSON-столбцов
При обновлении JSON-столбцов используйте синтаксис PHP -> для обращения к нужному ключу в JSON-объекте. Эта операция поддерживается только в БД, поддерживающих JSON-столбцы:
Increment и Decrement
Конструктор запросов предоставляет удобные методы для увеличения и уменьшения значений заданных столбцов. Это просто более выразительный и краткий способ по сравнению с написанием оператора update вручную.
Оба метода принимают один обязательный аргумент — столбец для изменения. Второй аргумент может быть передан для указания, на какую величину необходимо изменить значение столбца:
Вы также можете указать дополнительные поля для изменения:
Удаление ( DELETE )
Конструктор запросов предоставляет метод PHP delete () для удаления записей из таблиц. Вы можете ограничить оператор PHP delete () , добавив условие PHP where () перед его вызовом:
Если вы хотите очистить таблицу (усечение), удалив все строки и обнулив счётчик ID, используйте метод PHP truncate () :
Усечение таблицы аналогично удалению всех её записей, а также сбросом счётчика autoincrement-полей. — прим. пер.
Пессимистическая блокировка
В конструкторе запросов есть несколько функций, которые помогают делать «пессимистическую блокировку» (pessimistic locking) для ваших операторов SELECT. Для запуска оператора SELECT с «разделяемой блокировкой» вы можете использовать в запросе метод PHP sharedLock () . Разделяемая блокировка предотвращает изменение выбранных строк до конца транзакции:
Или вы можете использовать метод PHP lockForUpdate () . Блокировка «для изменения» предотвращает изменение строк и их выбор другими разделяемыми блокировками:
Комментарии (4)
Возможно ли динамически составлять набор методов для выборки? В случае, если заранее набор условий неизвестен, я могу добавить их в RAW sql в цикле, но как реализовать добавление например where в цикле. И если в случае, если у меня только where, я могу добавить условия в массив, то если добавится LIKE, то как реализовать я уже не знаю. Есть какая нибудь информация?
Конечно поздно, но может другим понадобится. Если я правильно понял, то тебе нужно что то такое
$query = \DB::table(‘название таблицы’);
$query->where(‘что то сравниваешь’, ‘с чем то сравниваешь’);
$query->groupBy(‘id’)->get();
А как сделать чтобы выбрало где одно поле меньше другого поля в той же таблице. В Mysql запрос такого вида
Источник