...
✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як використовувати функцію підключення декількох баз даних Laravel на веб-сайті

52

Ви хочете підключити кілька баз даних до своєї програми Laravel? Іноді ви можете зіткнутися з ситуацією, коли вам потрібно мати справу з кількома базами даних. У цій статті ми вивчаємо підключення та використання декількох баз даних у програмі Laravel. Laravel забезпечує підтримку декількох підключень до бази даних у самому своєму ядрі.

Зазвичай нам потрібна єдина база даних для одного веб-сайту. Але, можливо, вам доведеться зберігати деякі дані про вашу програму в іншій базі даних. Я працював над проектом електронної комерції, де ми хотіли надіслати деталі замовлення в окрему базу даних. У вашому випадку вимоги можуть бути різними.

Сказавши це, давайте подивимось на підключення та використання декількох баз даних з Laravel.

Додайте кілька підключень до бази даних у Laravel

Як я вже говорив, Laravel дозволяє підключати кілька баз даних. Ми можемо використовувати іншу платформу баз даних, таку як SQLite, MySQL, SQLSRV з Laravel. Для цього підручника я збираюся використовувати інший екземпляр MySQL окремої бази даних. По порядку, ми збираємося мати справу з окремою базою даних MySQL як додатковим сховищем.

Laravel зберігає у config/database.phpфайлі підключення до бази даних. Щоб додати ще одне підключення MySQL, нам потрібно змінити цей файл.

Додамо ще одне з’єднання, а саме ‘mysql2’. Ви можете дати будь-яке інше ім’я цьому з’єднанню. Просто переконайтеся, що ви будете використовувати те саме ім’я під час взаємодії з базою даних.

config / database.php

<?php
 
use IlluminateSupportStr;
 
return [
    ...
 
    'connections' => [
        ...
        ...
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            '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'),
            ]): [],
        ],
 
        'mysql2' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST_2', '127.0.0.1'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'forge'),
            'username' => env('DB_USERNAME_2', 'forge'),
            'password' => env('DB_PASSWORD_2', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            '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'),
            ]): [],
        ],
    ]

У наведеному вище коді з’єднання ‘mysql’ є типовим. Я додав нове з’єднання ‘mysql2’ з різними константами. Тут я передав константи як DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2 тощо. Якщо ваша база даних розміщена на іншому сервері, вам слід також змінити ключі DB_HOST_2 і DB_PORT_2. Припускаю, що обидві бази даних знаходяться на одному сервері. Отже, я не змінюю значення цих констант.

Значення цих констант Laravel отримує за допомогою env()методу. Це означає, що ми повинні додати інші деталі бази даних у файл .env, як показано нижче.

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=
DB_USERNAME_2=
DB_PASSWORD_2=

Після виконання вищевказаних кроків ми закінчили з підключенням іншої бази даних у Laravel. Наступні матеріали взаємодіють із цією базою даних.

Запустіть міграцію в іншій базі даних у Laravel

Коли справа стосується Laravel, нам завжди слід створювати таблиці в базі даних за допомогою міграцій. Скажімо, ми хочемо створити таблицю продуктів у нашій окремій базі даних. Запустіть команду нижче, яка створить файл міграції.

php artisan make:migration create_products_table

Він створить новий файл у каталозі ‘database / migrations’. Відкрийте файл у редакторі та передайте новостворене з’єднання, як показано нижче.

<?php
 
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
 
class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mysql2')->create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('mysql2')->dropIfExists('products');
    }
}

Я передав значення ‘mysql2’ connectionметоду Schemaкласу. Це означає, що під час запуску команди migrate цей код виконує наведений вище код в іншій базі даних, рядок якого ми передали.

php artisan migrate

Після запуску наведеної вище команди перейдіть до вашої другої бази даних. Тепер у нього повинна бути таблиця „продуктів".

Запустіть запити в іншій базі даних

У Laravel ви можете взаємодіяти з базою даних або за допомогою Конструктора запитів, або за допомогою Eloquent ORM.

DBfacade надає метод під назвою з’єднання, який використовується для запуску запитів в іншій базі даних. Давайте напишемо запит на підключення ‘mysql2’ за допомогою Query Builder.

$products = DB::connection('mysql2')->select('SELECT * FROM products');
$products = DB::connection('mysql2')->select('SELECT * FROM products where id = ?', [1]);

Query Builder автоматично виконає вищезазначені запити в іншій базі даних, взявши посилання на спосіб підключення.

Що стосується Eloquent, існує 2 способи підключення окремих баз даних. Перший спосіб – використання $connectionзмінної всередині класу Model.

<?php
 
namespace AppModels;
 
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
 
class Product extends Model
{
    use HasFactory;
 
    /**
     * The connection name for the model.
     *
     * @var string
     */
    protected $connection = 'mysql2'; //pass the connection name here
}

Тепер модель "Продукти" буде мати справу лише з другою базою даних.

У другому варіанті ви можете налагодити зв’язок на льоту, коли це потрібно. Таким чином, ви можете взаємодіяти з кількома базами даних з однієї Моделі.

<?php
...
use AppModelsProduct;
 
class ProductController extends Controller
{
    public function index()
    {
        $product = new Product;
        $product->setConnection('mysql2');
        $arr_product = $product->find(1);
        dd($arr_product);
    }
}

Тут я встановив час виконання з’єднання, використовуючи setConnection()метод.

Це воно! Сподіваюся, ви розумієте, як підключити кілька баз даних у програмі Laravel. Будь ласка, поділіться своїми думками та пропозиціями в розділі коментарів нижче.

Пов’язані статті

Джерело запису: artisansweb.net

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі