Где в laravel подключение к бд
Перейти к содержимому

Где в laravel подключение к бд

  • автор:

How to connect to MySQL in Laravel

As a new web developper I was confused by this question, but today I finally figured it out. Here I want to share with you my notes.

Actually we have two ways to connect to the database of MySQL in Laravel.

  1. With Laravel built-in server, run by php artisan serve :
  • Create a new Laravel project by running in terminal in the repository of your choice: laravel new project_name .
  • Once it’s finished, run cd project_name. .
  • Suppose you’re using VSCode, run code . to open the project folder.
  • In .env , edit as below:
  • Go to your terminal and login to MySQL: mysql -u ur_username -p and then enter your password. I suppose you’ve already download mysql globally.
  • Run CREATE DATABASE project_name; then exit; .
  • Find in folder Config the file database.php , and edit in the mysql part as below:

Now run php artisan serve , try php artisan migrate to see if the users table has been migrated in MySQL database, if yes, you’ve connected to database successfully!

2. Use MAMP, so you can edit the database in phpMyAdmin, and run the project in localhost:

  • In terminal, run cd /Applications/MAMP/htdocs .
  • Create a project in this folder, by running laravel new project_name .
  • In .env , edit as below:
  • In database.php , edit as below in the row of mysql :
  • Start your MAMP engine, and go to localhost phpMyAdmin to add a database as project_name
  • Test by running php artisan migrate , if success, you will see table users table in your phpMyAdmin database.
  • Now the url to see your project would be (http://localhost:8888/project_name/public/)

This is my first post in medium, I hope this article can help people if they got frustrated like me before.

Database: Getting Started

Almost every modern web application interacts with a database. Laravel makes interacting with databases extremely simple across a variety of supported databases using raw SQL, a fluent query builder, and the Eloquent ORM. Currently, Laravel provides first-party support for five databases:

  • MariaDB 10.3+ (Version Policy)
  • MySQL 5.7+ (Version Policy)
  • PostgreSQL 10.0+ (Version Policy)
  • SQLite 3.8.8+
  • SQL Server 2017+ (Version Policy)

Configuration

The configuration for Laravel’s database services is located in your application’s config/database.php configuration file. In this file, you may define all of your database connections, as well as specify which connection should be used by default. Most of the configuration options within this file are driven by the values of your application’s environment variables. Examples for most of Laravel’s supported database systems are provided in this file.

By default, Laravel’s sample environment configuration is ready to use with Laravel Sail, which is a Docker configuration for developing Laravel applications on your local machine. However, you are free to modify your database configuration as needed for your local database.

SQLite Configuration

SQLite databases are contained within a single file on your filesystem. You can create a new SQLite database using the touch command in your terminal: touch database/database.sqlite . After the database has been created, you may easily configure your environment variables to point to this database by placing the absolute path to the database in the DB_DATABASE environment variable:

To enable foreign key constraints for SQLite connections, you should set the DB_FOREIGN_KEYS environment variable to true :

Microsoft SQL Server Configuration

To use a Microsoft SQL Server database, you should ensure that you have the sqlsrv and pdo_sqlsrv PHP extensions installed as well as any dependencies they may require such as the Microsoft SQL ODBC driver.

Configuration Using URLs

Typically, database connections are configured using multiple configuration values such as host , database , username , password , etc. Each of these configuration values has its own corresponding environment variable. This means that when configuring your database connection information on a production server, you need to manage several environment variables.

Some managed database providers such as AWS and Heroku provide a single database "URL" that contains all of the connection information for the database in a single string. An example database URL may look something like the following:

These URLs typically follow a standard schema convention:

For convenience, Laravel supports these URLs as an alternative to configuring your database with multiple configuration options. If the url (or corresponding DATABASE_URL environment variable) configuration option is present, it will be used to extract the database connection and credential information.

Read & Write Connections

Sometimes you may wish to use one database connection for SELECT statements, and another for INSERT, UPDATE, and DELETE statements. Laravel makes this a breeze, and the proper connections will always be used whether you are using raw queries, the query builder, or the Eloquent ORM.

To see how read / write connections should be configured, let’s look at this example:

Note that three keys have been added to the configuration array: read , write and sticky . The read and write keys have array values containing a single key: host . The rest of the database options for the read and write connections will be merged from the main mysql configuration array.

You only need to place items in the read and write arrays if you wish to override the values from the main mysql array. So, in this case, 192.168.1.1 will be used as the host for the "read" connection, while 192.168.1.3 will be used for the "write" connection. The database credentials, prefix, character set, and all other options in the main mysql array will be shared across both connections. When multiple values exist in the host configuration array, a database host will be randomly chosen for each request.

The sticky Option

The sticky option is an optional value that can be used to allow the immediate reading of records that have been written to the database during the current request cycle. If the sticky option is enabled and a "write" operation has been performed against the database during the current request cycle, any further "read" operations will use the "write" connection. This ensures that any data written during the request cycle can be immediately read back from the database during that same request. It is up to you to decide if this is the desired behavior for your application.

Running SQL Queries

Once you have configured your database connection, you may run queries using the DB facade. The DB facade provides methods for each type of query: select , update , insert , delete , and statement .

Running A Select Query

To run a basic SELECT query, you may use the select method on the DB facade:

The first argument passed to the select method is the SQL query, while the second argument is any parameter bindings that need to be bound to the query. Typically, these are the values of the where clause constraints. Parameter binding provides protection against SQL injection.

The select method will always return an array of results. Each result within the array will be a PHP stdClass object representing a record from the database:

Selecting Scalar Values

Sometimes your database query may result in a single, scalar value. Instead of being required to retrieve the query’s scalar result from a record object, Laravel allows you to retrieve this value directly using the scalar method:

Selecting Multiple Result Sets

If your application calls stored procedures that return multiple result sets, you may use the selectResultSets method to retrieve all of the result sets returned by the stored procedure:

Using Named Bindings

Instead of using ? to represent your parameter bindings, you may execute a query using named bindings:

Running An Insert Statement

To execute an insert statement, you may use the insert method on the DB facade. Like select , this method accepts the SQL query as its first argument and bindings as its second argument:

Running An Update Statement

The update method should be used to update existing records in the database. The number of rows affected by the statement is returned by the method:

Running A Delete Statement

The delete method should be used to delete records from the database. Like update , the number of rows affected will be returned by the method:

Running A General Statement

Some database statements do not return any value. For these types of operations, you may use the statement method on the DB facade:

Running An Unprepared Statement

Sometimes you may want to execute an SQL statement without binding any values. You may use the DB facade’s unprepared method to accomplish this:

Warning
Since unprepared statements do not bind parameters, they may be vulnerable to SQL injection. You should never allow user controlled values within an unprepared statement.

Implicit Commits

When using the DB facade’s statement and unprepared methods within transactions you must be careful to avoid statements that cause implicit commits. These statements will cause the database engine to indirectly commit the entire transaction, leaving Laravel unaware of the database’s transaction level. An example of such a statement is creating a database table:

Please refer to the MySQL manual for a list of all statements that trigger implicit commits.

Using Multiple Database Connections

If your application defines multiple connections in your config/database.php configuration file, you may access each connection via the connection method provided by the DB facade. The connection name passed to the connection method should correspond to one of the connections listed in your config/database.php configuration file or configured at runtime using the config helper:

You may access the raw, underlying PDO instance of a connection using the getPdo method on a connection instance:

Listening For Query Events

If you would like to specify a closure that is invoked for each SQL query executed by your application, you may use the DB facade’s listen method. This method can be useful for logging queries or debugging. You may register your query listener closure in the boot method of a service provider:

Monitoring Cumulative Query Time

A common performance bottleneck of modern web applications is the amount of time they spend querying databases. Thankfully, Laravel can invoke a closure or callback of your choice when it spends too much time querying the database during a single request. To get started, provide a query time threshold (in milliseconds) and closure to the whenQueryingForLongerThan method. You may invoke this method in the boot method of a service provider:

Database Transactions

You may use the transaction method provided by the DB facade to run a set of operations within a database transaction. If an exception is thrown within the transaction closure, the transaction will automatically be rolled back and the exception is re-thrown. If the closure executes successfully, the transaction will automatically be committed. You don’t need to worry about manually rolling back or committing while using the transaction method:

Handling Deadlocks

The transaction method accepts an optional second argument which defines the number of times a transaction should be retried when a deadlock occurs. Once these attempts have been exhausted, an exception will be thrown:

Manually Using Transactions

If you would like to begin a transaction manually and have complete control over rollbacks and commits, you may use the beginTransaction method provided by the DB facade:

You can rollback the transaction via the rollBack method:

Lastly, you can commit a transaction via the commit method:

Note
The DB facade’s transaction methods control the transactions for both the query builder and Eloquent ORM.

Connecting To The Database CLI

If you would like to connect to your database’s CLI, you may use the db Artisan command:

If needed, you may specify a database connection name to connect to a database connection that is not the default connection:

Inspecting Your Databases

Using the db:show and db:table Artisan commands, you can get valuable insight into your database and its associated tables. To see an overview of your database, including its size, type, number of open connections, and a summary of its tables, you may use the db:show command:

You may specify which database connection should be inspected by providing the database connection name to the command via the —database option:

If you would like to include table row counts and database view details within the output of the command, you may provide the —counts and —views options, respectively. On large databases, retrieving row counts and view details can be slow:

Table Overview

If you would like to get an overview of an individual table within your database, you may execute the db:table Artisan command. This command provides a general overview of a database table, including its columns, types, attributes, keys, and indexes:

Monitoring Your Databases

Using the db:monitor Artisan command, you can instruct Laravel to dispatch an Illuminate\Database\Events\DatabaseBusy event if your database is managing more than a specified number of open connections.

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

To get started, you should schedule the db:monitor command to run every minute. The command accepts the names of the database connection configurations that you wish to monitor as well as the maximum number of open connections that should be tolerated before dispatching an event:

Scheduling this command alone is not enough to trigger a notification alerting you of the number of open connections. When the command encounters a database that has an open connection count that exceeds your threshold, a DatabaseBusy event will be dispatched. You should listen for this event within your application’s EventServiceProvider in order to send a notification to you or your development team:

Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel attempts to take the pain out of development by easing common tasks used in most web projects.

  • Our Team
  • Release Notes
  • Getting Started
  • Routing
  • Blade Templates
  • Authentication
  • Authorization
  • Artisan Console
  • Database
  • Eloquent ORM
  • Testing
  • Laravel Bootcamp
  • Laracasts
  • Laravel News
  • Laracon
  • Laracon AU
  • Laracon EU
  • Laracon India
  • Jobs
  • Forums
  • Trademark
  • WebReinvent
  • Vehikl
  • Tighten
  • 64 Robots
  • Active Logic
  • Byte 5
  • Curotec
  • Cyber-Duck
  • DevSquad
  • Jump24
  • Kirschbaum
  • Cashier
  • Dusk
  • Echo
  • Envoyer
  • Forge
  • Horizon
  • Nova
  • Octane
  • Sail
  • Sanctum
  • Scout
  • Spark
  • Telescope
  • Valet
  • Vapor

Laravel is a Trademark of Taylor Otwell. Copyright © 2011-2023 Laravel LLC.

База данных · Начало работы

Почти каждое современное веб-приложение взаимодействует с базой данных. Laravel делает взаимодействие с базами данных чрезвычайно простым через поддержку множества баз данных, используя либо сырой SQL построителя запросов, либо Eloquent ORM. В настоящее время Laravel обеспечивает поддержку пяти баз данных:

  • MariaDB 10.2+ (Version Policy)
  • MySQL 5.7+ (Version Policy)
  • PostgreSQL 9.6+ (Version Policy)
  • SQLite 3.8.8+
  • SQL Server 2017+ (Version Policy)

Конфигурирование

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

По умолчанию пример конфигурации окружения Laravel готов к использованию с Laravel Sail, который представляет собой конфигурацию Docker для разработки приложений Laravel на вашем локальном компьютере. Однако вы можете изменить конфигурацию своей базы данных по мере необходимости для своей локальной базы данных.

Конфигурация SQLite

Базы данных SQLite содержатся в одном файле вашей файловой системы. Вы можете создать новую базу данных SQLite, используя команду touch в консоли: touch database/database.sqlite . После создания базы данных вы можете легко настроить переменные окружения так, чтобы они указывали на эту базу данных, указав абсолютный путь к базе данных в переменной DB_DATABASE окружения:

Чтобы включить ограничения внешнего ключа для соединений SQLite, установите переменную DB_FOREIGN_KEYS окружения в true :

Конфигурация Microsoft SQL Server

Чтобы использовать базу данных Microsoft SQL Server, вы должны убедиться, что у вас установлены расширения PHP sqlsrv и pdo_sqlsrv , а также любые зависимости, которые могут им потребоваться, например, драйвер Microsoft SQL ODBC.

Конфигурация с использованием URL

Обычно соединения с базой данных конфигурируются с использованием нескольких значений, таких как host , database , username , password и т.д. Каждое из этих значений имеет свою собственную соответствующую переменную окружения. Это означает, что при указании информации о соединении с базой данных на рабочем веб-сервере вам необходимо управлять несколькими переменными окружения.

Некоторые поставщики СУБД, такие, как AWS и Heroku, предоставляют единый «URL» базы данных, который содержит всю информацию о соединении в одной строке. Пример URL-адреса базы данных может выглядеть так:

Эти URL обычно следуют соглашению стандартной схемы:

Для удобства Laravel поддерживает эти URL-адреса в качестве альтернативы настройке базы данных с несколькими параметрами конфигурации. Если присутствует параметр конфигурации url (или соответствующая переменная DATABASE_URL окружения), то он будет использоваться для получения информации о соединении с базой данных и об учетных данных.

Соединения для чтения и записи

По желанию можно использовать одно соединение с базой данных для операторов SELECT , а другое – для операторов INSERT , UPDATE и DELETE . Laravel упрощает эту задачу, и всегда будут использоваться соответствующие соединения, независимо от того, используете ли вы сырые запросы построителя запросов или Eloquent ORM.

Чтобы увидеть, как должны быть настроены соединения для чтения / записи, давайте посмотрим на этот пример:

Обратите внимание, что в массив конфигурации были добавлены три ключа: read , write и sticky . Ключи read и write имеют значения массива, содержащие один ключ: host . Остальные параметры базы данных для соединений read и write будут объединены из основного массива конфигурации mysql .

В массивы read и write вам нужно помещать только те элементы, значения которых вы хотите переопределить из основного массива mysql . Таким образом, в этом случае 192.168.1.1 будет использоваться в качестве хоста для соединения «чтение», а 192.168.1.3 – для соединения «запись». Учетные данные БД, префикс, набор символов и все другие параметры из основного массива mysql будут совместно использоваться обоими соединениями. Если в массиве конфигурации host существует несколько значений, то для каждого запроса хост базы данных будет выбран случайным образом.

Параметр sticky

Параметр sticky – это необязательное значение, которое может использоваться для разрешения немедленного чтения записей, которые были записаны в базу данных во время текущего цикла запроса. Если опция sticky включена и в текущем цикле запроса к базе данных была выполнена операция «записи», то любые дальнейшие операции «чтения» будут использовать соединение «запись». Это гарантирует, что любые данные, записанные во время цикла запроса, могут быть немедленно обратно прочитаны из базы данных во время того же запроса. Вам решать, является ли это желаемым поведением для вашего приложения.

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

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

Выполнение Select-запроса

Чтобы выполнить базовый запрос SELECT , вы можете использовать метод select фасада DB :

Первым аргументом, переданным методу select , является SQL-запрос, а вторым аргументом – любые привязки параметров, необходимые для запроса. Обычно это значения ограничений выражений where . Привязка параметров обеспечивает защиту от SQL-инъекций.

Метод select всегда возвращает «массив» результатов. Каждый результат в массиве будет объектом stdClass PHP, представляющим запись из базы данных:

Использование именованных псевдопеременных

Вместо использования символа ? для связывания параметров вы можете выполнить запрос, используя именованные привязки:

Выполнение Insert-запроса

Чтобы выполнить запрос с INSERT , вы можете использовать метод insert фасада DB . Как и select , этот метод принимает запрос SQL в качестве первого аргумента, а привязки – в качестве второго аргумента:

Выполнение Update-запроса

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

Выполнение Delete-запроса

Для удаления записей из базы данных следует использовать метод delete . Как и update , количество затронутых выражением строк будут возвращены этим методом:

Выполнение запроса общего типа

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

Выполнение неподготовленного запроса

По желанию может потребоваться выполнить запрос SQL без привязки каких-либо значений. Для этого используйте метод unprepared фасада DB :

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

Неявные фиксации (implicit commit)

При использовании в транзакциях методов statement и unprepared фасада DB вы должны быть осторожны, чтобы избежать операторов, которые вызывают неявные фиксации. Эти операторы заставят ядро базы данных косвенно зафиксировать всю транзакцию, в результате чего Laravel не будет знать об уровне транзакции базы данных. Примером такого оператора является создание таблицы базы данных:

Пожалуйста, обратитесь к руководству по MySQL для ознакомления со списком всех операторов, которые выполняют неявные фиксации.

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

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

Вы можете получить доступ к сырому, базовому экземпляру PDO текущего соединения, используя метод getPdo экземпляра соединения:

Прослушивание событий запроса

По желанию можно указать замыкание, которое будет вызываться для каждого SQL-запроса, выполняемого вашим приложением, используя метод listen фасада DB . Этот метод может быть полезен для логирования запросов или их отладки. Вы можете зарегистрировать замыкание слушателя запросов в методе boot поставщика служб:

Транзакции базы данных

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

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

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

Использование транзакций вручную

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

Вы можете откатить транзакцию с помощью метода rollBack :

Наконец, вы можете зафиксировать транзакцию с помощью метода commit :

Методы транзакций фасада DB контролируют транзакции как для построителя запросов, так и для Eloquent ORM.

Подключение к базе данных с помощью интерфейса командной строки Artisan

Если вы хотите подключиться к своей базе данных с помощью интерфейса командной строки, то вы можете использовать команду db Artisan:

При необходимости, вы можете указать имя соединения для подключения к базе данных, не являющееся соединением по умолчанию:

Laravel база данных: настраиваем соединение

laravel-database

Всем хэллоу! ��

Выдалась свободная минутка, и я решил сделать очередной шаг к созданию своего тестового Laravel сайта, в процессе чего я знакомлю вас с основными конструкциями и механизмами Laravel фреймворка.

Сегодня на повестке дня обзор настроек соединения нашего сайта с Laravel database, в которой в дальнейшем будут храниться данные наших пользователей и посты блога.

Сразу скажу, что у Laravel с database settings всё хорошо, и на их произведение в рамках предыдущей статьи об установке механизма Laravel аутентификации у меня лично ушло 2 минуты.

Причём, первую минуту я создавал саму базу, а половину второй размышлял, какую СУБД всё-таки выбрать �� Остальным же 30 секундам и будет посвящена дальнейшая информация, которой, как вы понимаете, сегодня много не будет.

Laravel DB connection: какие СУБД поддерживаются?

Из коробки Laravel позволяет использовать следующие реляционные СУБД:

  • MySQL
  • PostgreSQL
  • SQLite
  • SQL Server

Также Laravel поддерживает NoSQL СУБД Redis, который зачастую используют для хранения кэшированных данных благодаря высокой скорости записи и извлечения данных из неё, поэтому о настройках соединения с ним поговорим чуть позже, когда разговор дойдёт до описания методов работы с серверным кешом сайта.

Настройки соединения с Laravel database: способ первый

Давно пора уже переходить к самой сути �� Итак, допустим, БД вы уже создали, и самое время настроить подключение к базе данных в Laravel приложении.

Если же у вас вдруг возникли проблемы с созданием самой БД, то для MySQL могу порекомендовать статью о создании MySQL БД в консоли и произведении с ней других действий через командную строку сервера. А если вы являетесь поклонником визуальных инструментов для работы с БД, например, phpMyAdmin, то милости прошу сюда.

Настройки соединения Laravel с базой данных можно задать двумя способами. Первый — самый простой и правильный — заключается в редактировании файла .env, расположенного в корне проекта. Интересовать нас будет следующая секция:

Так выглядит она по умолчанию, т.е. непосредственно после установки Laravel на сервер. Как видите по значением параметров конфигурации соединения, разработчики Laravel предполагают использование MySQL в качестве СУБД по умолчанию и Laravel Homestead для локальной разработки.

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

DB_CONNECTION — СУБД, которая будет использоваться для управления базой данных.
DB_HOST — адрес сервера БД. При локальной разработке (с использованием локального веб-сервера) в 90% случаев он будет таким, как по умолчанию — 127.0.0.1.
DB_PORT — номер сетевого порта, через который будет происходить соединение с сервером базы данных. Если вы не указывали его явно при настройке СУБД на сервере, то для MySQL по умолчанию он будет 3306, как и в примере выше, для PostgeSQL5432, для остальных поддерживаемых Laravel DB нужно смотреть, наизусть не помню ��
DB_DATABASE — собственно, имя базы данных, которая будет использоваться для хранения информации Laravel приложения.
DB_USERNAME — имя пользователя СУБД для доступа к данным, хранимым в БД. Пользователей, естественно, у вас может быть несколько, причём каждый из них может обладать своим набором прав. Действия по манимуляции юзеров из консоли MySQL описаны в статье по ссылке в начале данной публикации.
DB_PASSWORD — пароль пользователя СУБД для подключения к database из Laravel приложения.

Тем, кто заглядывает в .env впервые, хочу отметить, что значения интересующих нас переменных окружения: пользователя, БД, адрес сервера в файле нужно указывать без кавычек, хотя это и строковые данные. Но у нас тут и не PHP используется, в принципе ��

Конфигурация соединения с Laravel базой данных: способ второй

Первый способ настройки связи сайта на Laravel с БД мы рассмотрели. Кроме него существует вариант расширенной конфигурации через файл корень_сайта\config\database.php.

Приведу небольшую расшифровочку его необходимых нам на данном этапе параметров на случай, если вам нужна будет тонкая настройка Laravel database connection. Начинается файл со следующей строки:

Параметр default содержит название соединения (по умолчанию имеют названия, созвучные используемым СУБД), которое будет применяться по умолчанию для всех баз. Как видите, значение переменной берётся из .env DB_CONNECTION. Если она не будет указана, то используется mysql. Вы сами можете прописать жёстко значение, какое посчитаете нужным.

Под названием соединения, указываемого в параметре default, имеются ввиду элементы массива connections, который описан немного ниже:

Здесь, как вы видите, содержатся как раз настройки подключения к серверу Laravel базы данных, разбитые на разные секции, которые создатели Laravel нарекли «подключениями» для каждой из поддерживаемых фреймворком СУБД, которые были перечислены в начале статьи.

Думаю, какое подключение какой СУБД соответствует, пояснять не нужно. Значения многим параметрам, как вы видите, можно задавать в файле .env. Некоторых используемых в данном файле переменных, кстати, даже нет в .env по умолчанию (например, DB_SOCKET из секции настроек MySQL соединения), наверное, из-за отсутствия необходимости их использования в большинстве случаев.

Для соединения с Laravel SQLite базой, кстати, тоже используется несуществующая по умолчанию переменная DB_DATABASE, значение которой должно быть абсолютным путём к файлу базы данных, указанному в .env в следующем формате:

Если же для какого-то из необходимых вам параметров нужно будет менять значение в зависимости от окружения, в котором будет работать ваше Laravel приложение, то вы знаете, что делать �� Правильно — создать для неё переменную в файле .env и использовать её в данном конфиге с помощью хэлпера env() в том виде, в каком сейчас используются существующие.

По поводу данного блока настроек, есть ещё один нюанс… Он заключается в том, что код Laravel взаимодействует с базами данных через методы PHP PDO. А в данном блоке настроек у каждого массива сеттингов соединения с определённой СУБД есть параметр driver, значения которого соответствуют PHP PDO драйверам, которые должны быть установлены на вашем сервере для успешного взаимодействия с Laravel БД.

Поэтому, если вы указали все параметры соединения с Laravel DB верно, но фреймворк выдаёт ошибку соединения, скорее всего, проблема именно в драйвере PDO. Поставьте необходимый для вашей СУБД и проверьте его подключение в файле конфигурации php.ini. Нужно, чтобы он не был закомментирован:

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

Также в рассматриваемом нами конфиге config\database.php ещё есть секции настроек миграций и соединения с Redis, на которых я не буду сейчас задерживаться, и рассмотрю их при обзоре механизма Laravel миграций и кэширования, которые будут ждать вас в дальнейших публикациях.

Поэтому, чтобы быть в курсе их выхода, рекомендую подписаться на обновления и проверять почаще свой электронный почтовый ящик ��

Настройки чтения и записи для одной Laravel БД

Иногда в процессе разработки появляется необходимость использовать одно подключение к БД для чтения информации (выполнять SELECT запросы), а другое — для модификации данных (INSERT, UPDATE и DELETE запросы). Laravel позволяет сделать данное разграничение легко и быстро на уровне рассматриваемого нами конфига database.php.

При этом необходимые вам соединения будут использоваться при отправке чистых (raw) запросов к БД, а также при использовании конструктора запросов Laravel (query builder) и Eloquent ORM.

Для разграничения сеттингов чтения и записи в настройки соединения с необходимой СУБД нужно добавить секции read и write в следующем формате:

Пример выше взят из официальной документации Laravel по работе с БД и подразумевает, что база данных находится на нескольких серверах (репликах), т.е. разделение настроек соединения с БД может быть полезно при репликации данных, что на Highload проектах встречается достаточно часто, но при запуске стартапов (если они не будут сразу проектироваться под высокие нагрузки, конечно) вы с этим не скоро столкнётесь ��

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

В обоих приведённых примерах данные из массивов write и read переопределяют одноимённые переменные из родительского массива mysql. Остальные же будут действительны для обоих случаев.

Конфигурация Laravel базы данных: опция sticky

Также в примерах выше вы могли обратить внимание на переменную конфигурации соединения с Laravel database под названием sticky.

Данный параметр не является обязательным и может использоваться в случаях, когда нужно будет организовать немедленное чтение записей, которые были записаны в Laravel БД в рамках текущего запроса или цикла запросов. Принимает булевские значения, т.е. true/false.

Если sticky имеет значение true, и в рамках текущего цикла запроса была выполнена операция записи данных в БД, то любая операция чтения данных будет использовать write соединение.

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

Работа с несколькими Laravel DB

Когда вы используете в рамках своего приложения несколько БД, то в процессе разработки вы можете получить доступ к каждому соединению с помощью метода connection фасада Laravel DB, более подробно с полным списком методов которого я познакомлю вас в следующих статьях, где будут рассматриваться механизмы отправки запросов к базе.

Пользоваться данным методов можно следующим образом:

Имя используемого соединения с БД должно соответствовать одному из соединений, описанных в конфиге config\database.php.

Также вы можете получить чистый объект PHP PDO для произведения дальнейших действий с БД с помощью метода getPdo() следующим образом:

Laravel database: выводы по поводу настроек связи

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

Я лично пользуюсь вторым вариантом, а также советую и вам к нему прибегать, т.к. он является наиболее правильным и позволяет разделить настройки Laravel приложения для различных его окружений (речь идёт о DEV, STAGE и PROD).

Даже если вы льёте файлы проекта с локалки сразу на прод, то без данного способа вам всё равно не обойтись, т.к. как минимум, два окружения у вас уже будет, следовательно, и настроек соединения с Laravel БД также будет два разных набора. Поэтому .env и извлечён из-под контроля версий, т.к. каждая копия приложения будет содержать уникальный набор параметров.

Конфиг же config\database.php в репозиторий записывается, поэтому в нём необходимо указывать лишь общие для всех окружений настройки. Обратите на это, пожалуйста, особое внимание.

Возможно, приведённая сегодня информация многим покажется очевидной и недостойной внимания, но, если хотя бы одному из ста читателей она была полезна, то я уже буду считать свою цель достигнутой и понимать, что всё, чем я занимаюсь, кому-то да нужно ��

Поэтому оставляйте свои комментарии со своими отзывами (пусть даже негативными), чтобы я понимал, что нужно улучшить и обратить внимание в дальнейшем.

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

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