Laravel 5.2 辅助 mysql 数据库连接返回默认连接



我正在尝试使用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

所有其他变量的示例。

最新更新