Как я могу использовать несколько баз данных Laravel? - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу знать о нескольких базах данных laravel. Можно ли использовать базу данных по умолчанию, которая использует только логин пользователя и после входа отдельную группу по группе, и каждая группа использует независимую базу данных. например, 'db' - это база данных по умолчанию, она предназначена только для всех пользователей.

Пример : теперь 'John' - это вход в систему с использованием базы данных по умолчанию 'db'. Джон входит в группу group1 после входа в систему. Джон использует 'db1', где хранятся John's все типы данных. Другая сторона Теперь 'Alex' войдите, используя базу данных по умолчанию 'db'. Алекс входит в группу group2 после входа в систему. Алекс использует 'db2', где хранятся Alex's все типы данных. После входа в систему по умолчанию подключение к БД не нужно, поэтому я хочу заменить 'bd' to 'db1' or 'db' to 'db2'. Пожалуйста, предоставьте код для laravel

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Определите отдельное соединение с базой данных в config/database.php.

'mysql' => [ // default
    'driver' => 'mysql',
    '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', ''),
    ...
],
'db1' => [ // another 
    'driver' => 'mysql',
    'host' => env('DB_HOST_ONE', '127.0.0.1'),
    'port' => env('DB_PORT_ONE', '3306'),
    'database' => env('DB_DATABASE_ONE', 'forge'),
    'username' => env('DB_USERNAME_ONE', 'forge'),
    'password' => env('DB_PASSWORD_ONE', ''),
    ...
]

Обратите внимание , что вы должны определить соответствующую конфигурацию в вашем .env.

Тогда когдаВы хотите использовать db1 для подключения, используйте Config::set('database.default', 'db1').Однако это работает только тогда, когда вы знаете количество подключений к базам данных (которое вы можете определить в config/database.php), если у вас неизвестное количество баз данных, вам следует изменить конфигурацию напрямую, а не только имя подключения.

Пример:

Config::set('database.connections.mysql.database', 'db1')
Config::set('database.connections.mysql.username', 'admin');
Config::set('database.connections.mysql.password', 'secret');

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

0 голосов
/ 26 апреля 2019

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

Вы можете определить столько соединений с БД, сколько вы хотите, в вашем config/database.php

'mysql' => [
    'driver' => 'mysql',
    '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' => '',
    'strict' => true,
    'engine' => null,
],

'mysql2' => [
    'driver' => 'mysql',
    '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' => '',
    'strict' => true,
    'engine' => null,
],
...

Однако вам также потребуется способ указать для каждого пользователя, из какой другой внешней БД, из которой будут собираться его данные, например столбец db_name в таблице users.

В момент извлечения данных, скажем, 'Alex' Модель пользователя, вы можете сделать что-то вроде

$user = User::find(1); //if Alex has user_id 1 and where $user->db_name is 'mysql2' as is in the config/database.php file

$userDetails = DB::connection($user->db_name)->where('username',$user->name)->where('other_details','some details')->get();

Убедитесь, что вы указали это и в вашем .env, чтобы соответствовать тому, что определено в config/database.php

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=db2_name_here
DB_USERNAME_2=db2_username_here
DB_PASSWORD_2=db2_password_here

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...