我正在尝试使用Laravel 5.2连接第二个mysql数据库。
数据库.php配置:
[
'fetch' => PDO::FETCH_CLASS,
'default' => env('DB_CONNECTION', 'primary'),
'connections' => [
'primary' => [
'driver' => 'mysql',
'host' => env('DB_HOST', ''),
'database' => env('DB_DATABASE', ''),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'secondary' => [
'driver' => 'mysql',
'host' => 'secondary.host',
'database' => env('DB_DATABASE', ''),
'username' => env('DB_USERNAME', ''),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
'migrations' => 'migrations',
'redis' => [
'cluster' => false,
'default' => [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
];
法典:
<?php
namespace AppObjects;
use DB;
class Test
{
private $db;
public function __construct() {
$this->db = DB::connection('secondary');
// Read stuff from the secondary database, for example:
dump($this->db->select('SELECT * FROM addresses LIMIT 1;'));
}
}
不知何故,DB::connection('secondary')
返回的连接是我的主要数据库连接。
在深入研究 laravel 核心后,我注意到:IlluminateDatabaseConnectorsConnectionFactory::createConnection
返回不正确的连接。
您需要为每个查询指定连接:
DB::connection('secondary')->table('users')->where('id', 1)->get();
https://laravel.com/docs/5.5/database#using-multiple-database-connections
两个连接都有相同的 env 变量。每个连接需要有不同的变量:
DB_DATABASE_PRIMARY
DB_DATABASE_SECONDARY
所有其他变量的示例。