不配置多个数据库链接信息,如何操作多个数据库?

需求

快速创建分站,只需要设置不同的数据库就可以,链接用户名是一致的( 数据库名不一致其他链接信息一样,但是不可能手动去修改配置文件增加链接信息的 )

我的这个数据库名是变动的,我会获取域名的二级,然后载入对应的数据库

我的想法

比如模型可以设置 $databaseName = '123' 就去链接数据库 123

讨论

关于在程序中操作多个数据库,链接信息不改变(只改变数据库名)?

在程序中混合操作多个数据库?

这两个问题需要考虑在常规操作和模型操作的时候如何去操作,模型静态调用?

SysUser         // 用户库
SysSite          // 分站库
ShopWWW   // 商铺库对应  www.xxx.com
ShopVIP       // 商铺库对应  vip.xxx.com
ShopPRINT  // 商铺库对应 print.xxx.com
...
thanks.
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
Summer
最佳答案

设置数据库名称:

 \Config::set('database.connections.mysql.database', $databaseName);

使用以下方法重置 SQL 连接:

DB::purge('mysql');
4年前 评论
讨论数量: 9
Summer

设置数据库名称:

 \Config::set('database.connections.mysql.database', $databaseName);

使用以下方法重置 SQL 连接:

DB::purge('mysql');
4年前 评论

\DB::connection('test')->table('test')?

4年前 评论
StringKe

@lovecn 这样还是需要配置链接信息 connection('链接名')

4年前 评论

同一个数据库链接不同的库的话,在 table 前面加上库名就行了,假设配置是 a 库,查询 buser 表数据:

DB::table('b.user')->find(1);
4年前 评论
StringKe

@minororange 这个我知道,但是模型也是写 b.user 么?

4年前 评论

@StringKe 刚刚试了下是可以的:

class UserModel extends Model{
    protected $table = 'b.user';
}

dd(UserModel::query()->find(1));
4年前 评论
Summer

设置数据库名称:

 \Config::set('database.connections.mysql.database', $databaseName);

使用以下方法重置 SQL 连接:

DB::purge('mysql');
4年前 评论
StringKe

@Summer 同志,我这种需求,在使用模型的时候怎么才能比较快捷的操作?

Config::set('database.connections.mysql.database', $databaseName)

这样我的确可以通过模型静态方法去调取数据,但是我针对每个模型都需要不同的调用这是极其繁琐的,有其他方法或者思路来减少代码量么?

4年前 评论
arunfung

可以在 AppServiceProvider.php 文件中添加以下类似代码

public function boot(Request $request)
{
    if($request->getHttpHost() == 'aaa.app.com')
    {
            config(['database.connections.mysql.database' => 'aaa']);

            DB::purge('aaa');

            DB::reconnect('aaa');
     }
}
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!