Во одредени случаи апликацијата има потреба од повеќе од една база на податоци. На пример: раздвојување на податоци за автентикација, трансакциски податоци или пристап до стара (legacy) база на податоци. Laravel веќе нуди поддршка за повеќекратни database конекции, и тоа на многу едноставен начин.
Во продолжение следува целосен и практичен водич како да поврзеш две бази на податоци во еден Laravel проект.
Чекор 1 Додавање конфигурација за втора база во .env
Прво, додади ги креденцијалите за втората база на податоци во .env фајлот:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_one
DB_USERNAME=root
DB_PASSWORD=
DB2_CONNECTION=mysql
DB2_HOST=127.0.0.1
DB2_PORT=3306
DB2_DATABASE=database_two
DB2_USERNAME=root
DB2_PASSWORD=
Важно имињата на променливите да бидат различни (на пример DB2_...).
Чекор 2 Регистрирање на повеќе database конекции
Отвори го фајлот config/database.php и додади ја конфигурацијата за втората конекција:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
'mysql2' => [ // втора конекција
'driver' => 'mysql',
'host' => env('DB2_HOST'),
'port' => env('DB2_PORT'),
'database' => env('DB2_DATABASE'),
'username' => env('DB2_USERNAME'),
'password' => env('DB2_PASSWORD'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
],
],
Името на конекцијата може да биде mysql2 или нешто друго според твоите потреби.
Чекор 3 Користење на втората конекција во Model
Ако сакаш одреден Model да користи втора база, само додади ја $connection променливата во моделот.
Пример: Produkt.php
class Produkt extends Model
{
// database конекција
protected $connection = 'mysql2';
// име на табелата
protected $table = 'products';
}
class User extends Model
{
// Стандардна конекција
protected $connection = 'mysql';
}
Во овој пример, моделот
Produkt експлицитно ја користи втората database конекција (mysql2).
Сите query-и преку овој модел ќе се извршуваат над базатаmysql2, а табелата е рачно дефинирана преку$table.
Што со User моделот?
Моделот User ќе ја користи стандардната database конекција, дефинирана во config/database.php.
Затоа, не е задолжително да се додава $connection, бидејќи Laravel автоматски ја користи default конекцијата (обично mysql).
Чекор 4 Query Builder со втората конекција
Ако само одредени query-и треба да користат втора база, можеш директно да користиш:
DB::connection('mysql2')
Пример: SELECT
$data = DB::connection('mysql2')
->table('customers')
->get();
Пример: INSERT
DB::connection('mysql2')
->table('logs')
->insert([
'message' => 'Тест конекција со база 2',
]);
Пример: Raw Query
DB::connection('mysql2')
->statement('DELETE FROM temp_data');
Заклучок
Laravel ја прави работата со повеќе database конекции исклучително едноставна.
Потребно е само:
- Да додадеш конфигурација во
.env - Да ја регистрираш конекцијата во
database.php - Да ја користиш во Model или преку Query Builder
Со правилна структура, апликацијата без проблем може да работи со две или повеќе бази на податоци, без разлика дали се работи за legacy системи или големи, скалабилни апликации.