Laravel 5.6在运行时中永久更改数据库连接

时间:2018-08-08 13:09:42

标签: php mysql database laravel laravel-5.6

我有两个数据库。第二个数据库是动态变化的,即每个客户端都有其自己的数据库,因此数据库名称和密码不同,但所有客户端的架构都相同。因此,我有两个模型组,第一个模型组用于第一个数据库,第二个模型组用于第二个数据库。实际上,第二个模型组必须能够查询客户端数据库而不是默认数据库

所以我想动态设置默认数据库连接。Config::Set()仅对一个请求执行此操作。我希望在以后的每个请求中都使用它。

我使用Laravel框架,您知道一个干净的解决方案可以解决我的问题并帮助其他感兴趣的人

感谢大家的帮助

1 个答案:

答案 0 :(得分:2)

config/database.php中创建两个条目:

'connections' => array(

    # Connection one
    'mysql_1' => array(
        'driver'    => 'mysql_1',
        'host'      => 'host_1',
        'database'  => 'db_1',
        'username'  => 'username_1',
        'password'  => 'password_1'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    # Connection two
    'mysql_2' => array(
        'driver'    => 'mysql_2',
        'host'      => 'host_2',
        'database'  => 'db_2',
        'username'  => 'username_2',
        'password'  => 'password_2'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
),

为每组模型创建一个基础模型或特性,以在模型级别设置连接。更改所有模型以从其各自的基本模型扩展。

基本模型

class BaseGroupOneModel extends Model
{
    protected $connection = 'mysql_1';
}

class BaseGroupTwoModel extends Model
{
    protected $connection = 'mysql_2';
}

特质

trait GroupOneTrait
{
    protected $connection = 'mysql_1';
}

trait GroupTwoTrait
{
    protected $connection = 'mysql_2';
}

class GroupOneModel extends Model
{
    use app/Models/Traits/GroupOneTrait;
}

class GroupTwoModel extends Model
{
    use app/Models/Traits/GroupTwoTrait;
}