Это рекомендуемое правило для настройки деления базы данных в Laravel.
'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '196.168.1.2'
],
'sticky' => true,
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
Но если я хочу использовать различную информацию о доступе, такую как DB_NAME, USER_ID, PASS и т. Д., Для каждой базы данных чтения / записи, то как я могу это сделать? Спасибо.
Вы можете создать два соединения, а затем указать соединение с Eloquent с помощью метода on:
'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_HOST2', '127.0.0.1'),
'port' => env('DB_PORT2', '3306'),
'database' => env('DB_DATABASE2', 'forge'),
'username' => env('DB_USERNAME2', 'forge'),
'password' => env('DB_PASSWORD2', ''),
'unix_socket' => env('DB_SOCKET2', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
User::on('mysql2')->where('id', $id)->update($data);
Или с помощью Query Builder:
DB::connection('mysql2')->table('users')->where('id', $id)->update($data);
Вы можете объявить еще одно соединение БД, например:
'mysql' => [
'read' => [
'host' => '192.168.1.1',
],
'write' => [
'host' => '192.168.1.1'
],
'sticky' => true,
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
'writecon' => [
'read' => [
'host' => '196.168.1.2',
],
'write' => [
'host' => '196.168.1.2'
],
'driver' => 'mysql',
'port' => env('DB2_PORT', '3306'),
'database' => env('DB2_DATABASE', 'db2'),
'username' => env('DB2_USERNAME', 'somename'),
'password' => env('DB2_PASSWORD', 'somepass'),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
Затем в вашем .env добавьте:
DB2_PORT=3306
DB2_DATABASE=db2
DB2_USERNAME=somename
DB2_PASSWORD=somepass
И вы можете использовать это так:
$someModel->setConnection('writecon');
$someModel->save();
не проверено, но вы можете попробовать это.