6. База данных: Начало работы
- 1. Введение
- Running SQL Queries
- Database Transactions
- Connecting to the Database CLI
- Inspecting Your Databases
- Monitoring Your Databases
1. Введение
Почти каждое современное веб-приложение взаимодействует с базой данных. Laravel делает работу с базами данных чрезвычайно простой, поддерживая различные базы данных с использованием чистого SQL, гибкого конструктора запросов и ORM Eloquent. В настоящее время Laravel официально поддерживает пять баз данных:
- MariaDB 10.3+ (Политика версий)
- MySQL 5.7+ (Политика версий)
- PostgreSQL 10.0+ (Политика версий)
- SQLite 3.26.0+
- SQL Server 2017+ (Политика версий)
Кроме того, MongoDB поддерживается через пакет mongodb/laravel-mongodb
, который официально поддерживается MongoDB. Дополнительную информацию можно найти в документации Laravel MongoDB.
1.1. Конфигурация
Конфигурация сервисов базы данных Laravel находится в файле конфигурации вашего приложения config/database.php
. В этом файле вы можете определить все ваши подключения к базе данных, а также указать, какое подключение должно использоваться по умолчанию. Большинство параметров конфигурации в этом файле задаются значениями переменных окружения вашего приложения. Примеры для большинства поддерживаемых Laravel систем баз данных приведены в этом файле.
По умолчанию пример конфигурации окружения в Laravel готов к использованию с Laravel Sail, который представляет собой конфигурацию Docker для разработки приложений Laravel на локальной машине. Однако вы можете изменить конфигурацию базы данных в соответствии с вашими потребностями для локальной базы данных.
1.1.1. Конфигурация SQLite
Базы данных SQLite хранятся в одном файле на вашей файловой системе. Вы можете создать новую базу данных SQLite с помощью команды touch
в терминале: touch database/database.sqlite
. После создания базы данных вы можете легко настроить переменные окружения, указав абсолютный путь к базе данных в переменной окружения DB_DATABASE
:
DB_CONNECTION=sqliteDB_DATABASE=/absolute/path/to/database.sqlite
По умолчанию для подключений SQLite включены ограничения внешних ключей. Если вы хотите их отключить, установите переменную окружения DB_FOREIGN_KEYS
в значение false
:
DB_FOREIGN_KEYS=false
Если вы используете установщик Laravel для создания приложения Laravel и выбираете SQLite в качестве базы данных, Laravel автоматически создаст файл database/database.sqlite
и выполнит стандартные миграции базы данных за вас.
1.1.2. Конфигурация Microsoft SQL Server
Чтобы использовать базу данных Microsoft SQL Server, убедитесь, что у вас установлены PHP-расширения sqlsrv
и pdo_sqlsrv
, а также все необходимые зависимости, такие как ODBC-драйвер Microsoft SQL.
1.1.3. Конфигурация с использованием URL
Обычно подключения к базе данных настраиваются с использованием нескольких значений конфигурации, таких как host
, database
, username
, password
и других. У каждого из этих параметров есть своя соответствующая переменная окружения. Это означает, что при настройке информации о подключении к базе данных на сервере в продакшене вам нужно управлять несколькими переменными окружения.
Некоторые облачные провайдеры баз данных, такие как AWS и Heroku, предоставляют единый "URL" базы данных, который содержит всю информацию о подключении в одной строке. Пример URL базы данных может выглядеть следующим образом:
mysql://root:password@127.0.0.1/forge?charset=UTF-8
Эти URL-адреса, как правило, следуют стандартной схеме:
driver://username:password@host:port/database?options
Для удобства Laravel поддерживает такие URL-адреса в качестве альтернативы настройке базы данных с использованием нескольких параметров конфигурации. Если указана опция конфигурации url
(или соответствующая переменная окружения DB_URL
), Laravel извлечет из нее информацию о подключении и учетных данных базы данных.
1.2. Чтение и запись подключений
Иногда может потребоваться использовать одно подключение к базе данных для операторов SELECT, а другое — для операторов INSERT, UPDATE и DELETE. Laravel упрощает эту задачу, гарантируя, что правильные подключения будут использоваться независимо от того, используете ли вы чистые SQL-запросы, конструктор запросов или ORM Eloquent.
Чтобы понять, как следует настраивать подключения для чтения и записи, рассмотрим следующий пример:
'mysql' => [ 'read' => [ 'host' => [ '192.168.1.1', '196.168.1.2', ], ], 'write' => [ 'host' => [ '196.168.1.3', ], ], 'sticky' => true, 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => env('DB_CHARSET', 'utf8mb4'), 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [],],
Обратите внимание, что в массив конфигурации добавлены три ключа: read
, write
и sticky
. Ключи read
и write
содержат массивы с единственным ключом host
. Остальные параметры базы данных для подключений read
и write
будут объединены с основной конфигурацией mysql
.