【问题标题】:Laravel 4.2 dynamic database connectionLaravel 4.2 动态数据库连接
【发布时间】:2014-02-05 07:46:37
【问题描述】:

我正在尝试在同一实例下设置与多个数据库的连接以进行相关数据分析

这里是连接代码的基本思路

    $a = array('a','b','c');
    $b = array('a','b','c');

    foreach($a as $ac){
        foreach($b as $bc){     
            Config::set('database.connections.'.$ac.'_'.$bc, array(
                'driver'    => 'mysql',
                'host'      => 'somehost',
                'port'      => '3306',
                'database'  => $ac.'_'.$bc,
                'username'  => 'user',
                'password'  => 'user',
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => ''
            ));
        }
    }

该实例中大约有 40 个不同的数据库,并且可能会迅速变化,因此我想避免在配置文件中永久创建连接并使用用户输入动态生成连接。从我收集到的信息来看,上面的代码应该自动将数组附加到 database.connections(请参阅laravel github),但我收到了这个错误。

SQLSTATE[HY000] [2002] 没有这样的文件或目录

如果我将database.connections.".$ac.'_'.$bc 更改为database.connections.mysql,代码运行正常。那么我在这里缺少什么:(,我在输入将命中的第一个控制器的构造函数下调用那段代码。

非常感谢您提前提供的帮助

【问题讨论】:

  • 嗨。你找到答案了吗?
  • 在下面查看我的评论。自从我接触该项目的代码以来已经有一段时间了,但根据我发现的观察,我在我提出的每个新数据库中创建了一个虚拟表,因此代码总是有一些可以保证的东西。

标签: php mysql database laravel


【解决方案1】:

玩了一会儿,发现问题出在哪里。 在控制器中调用上面的代码后, 在模型中,不仅您必须建立初始连接,而且您必须在该语句中包含一个表以便将连接转移到特定数据库,否则如果您使用构建器查询的方式,它将回退到默认连接Laravel 文档中的示例。所以不要做

$this->query = DB::connection($ac.'_'.$bc);
$this->query = DB::table('sometable');

这样做

$this->query = DB:connection($ac.'_'.$bc)->table('sometable');

然后 $this->query 的连接将锁定到指向的新数据库。

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 2017-08-15
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2023-03-10
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多