Документация Laravel 5.5 Начало работы с базой данных

Laravel 5.5

laravel

 Начало работы с базой данных

к содержанию документации

Введение

В Laravel работа с базами данных предельно проста.

Вы можете  использовать:

  • Eloquent ORM
  • построитель запросов (query builder)
  • примитивы для работы с SQL-кодом напрямую.

На данный момент Laravel поддерживает четыре СУБД:

  • MySQL
  • PosgreSQL
  • SQLite
  • SQL Server

Настройки

Настройки находятся в файле config/database.php . Вы можете определить несколько подключений к базам данных, указав какое из них использовать по умолчанию. В файле уже приведены наиболее популярные варианты подключений.

По умолчанию приложение настроено на работу с Laravel Homestead, это виртуальное окружение для локальной разработки. Естественно, вы можете все изменить под свои задачи.

Настройки для SQLite

После создания файла базы SQLite (например, с помощью команды  touch database/database.sqlite ) необходимо указать тип соединения и абсолютный путь к этому файлу:

Настройки для SQL Server

В Laravel встроена поддержка SQL Server. Необходимо добавить настройки соединения в файле config/database.php :

Подключения для чтения или записи

Иногда возникает необходимость использовать одно подключение к базе для SELECT-запросов, а другое - для INSERT-, UPDATE- и DELETE-запросов. Laravel с легкостью решает эту проблему, причем вне зависимости от того, как именно вы формируете SQL-запрос: примитивами, построителем запросов или с помощью Eloquent ORM.

Пример:

Обратите внимание, что добавлено три новых параметра: read, write и sticky. При этом  read и write - это массивы всего с одним параметром host. Остальные настройки совпадают для обоих подключений, поэтому вынесены в общую часть массива mysql (это driver, database, ..., prefix).

Чтобы изменить, например, prefix для read-подключения, достаточно  добавить этот параметр в массив read. При этом для write-подключения параметр prefix останется прежним (таким, каким он указан в общей части массива mysql).

Параметр sticky

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

Использование нескольких подключений

Вы можете создать несколько подключений и явно выбирать необходимое при формировании запроса. Для этого предназначен  метод DB::connection(), ожидающий имя подключения, указанное в файле конфигурации config/database.php :

Еще можно получить доступ к базе через объект PDO c помощью метода getPdo():

Выполнение явных SQL-запросов

После настройки подключения к базе данных, вы можете выполнять запросы с помощью фасада DB, которые предоставляет доступ к методам для каждого типа запросов: select, update, insert, delete  и еще statement.

Запрос Select

Можно использовать метод select c фасадом DB:

Первым аргументом этого метода должен быть подготовленный запрос, вторым аргументом - данные для подстановки в этот запрос (биндинг данных). Обычно такая подстановка востребована в условиях where запроса. Данные необходимо передавать именно через второй аргумент для защиты от SQL-инъекций (то есть не стоит делать так: DB::select(' select * from users where age > '.$age).

Подробнее смотрите в документации php.

Метод select всегда возвращает массив объектов strClass с открытым доступом к значениям результата запроса:

Биндинг именованных данных

Вместо символа ? для биндинга данных вы можете использовать именованные параметры:

Запрос Insert

Можно использовать метод insert c фасадом DB. Как и select, этот метод ожидает первым аргументом подготовленный sql-запрос, вторым - данные для биндинга:

Запрос Update

Метод update предназначен для обновления существующих записей. Возвращает количество обновленных записей:

Запрос Delete

Метод update предназначен для удаления записей. Возвращает количество удаленных записей:

Произвольный запрос

Некоторые запросы не возвращают никаких значений. Для такого вида операций можно использовать метод statement с фасадом DB:

Обработка событий при запросах

Если вы хотите контролировать каждый sql-запрос вашего приложения, то вам может помочь метод listen. Он может быть полезен, например, для логирования запросов и отладки. Вам следует зарегистрировать свой обработчик в сервис-провайдере:

Транзакции

Что такое транзакции?

Для выполнения нескольких операций с базой данных в рамках одной транзакции вы можете использовать метод transaction с фасадом DB. Если в замыкании транзакции будет выброшено исключение, то автоматически произойдет откат транзакции, иначе  - коммит, то есть нет нужды вручную управлять транзакцией при работе с методом transaction:

Обработка взаимоблокировок (deadlocks)

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

Работа с транзакциями вручную

Если вы хотите начать транзакцию вручную и затем контролировать коммиты и откаты, то можете использоваться метод beginTransaction с фасадом DB:

Для отката транзакции используйте метод rollback:

Для коммита - метод commit:

к содержанию документации

все статьи по Laravel 5