【问题标题】:Is there a way to set db connection settings for all connection under same function in laravel 4?有没有办法在 laravel 4 中为同一功能下的所有连接设置数据库连接设置?
【发布时间】:2016-02-13 12:04:06
【问题描述】:

假设我在 app/config/database.php 中有以下数据库设置

'default' => 'mysql',

'connections' => array(

    # Our primary database connection
    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'host1',
        'database'  => 'database1',
        'username'  => 'user1',
        'password'  => 'pass1'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

    # Our secondary database connection
    'mysql2' => array(
        'driver'    => 'mysql',
        'host'      => 'host2',
        'database'  => 'database2',
        'username'  => 'user2',
        'password'  => 'pass2'
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
),

来自 laravel 的官方指南,有几种方法可以选择使用哪些连接设置。在我需要建立连接时设置它,

$users = DB::connection('mysql2')->select(...);

或在模型中设置:

class SomeModel extends Eloquent {

    protected $connection = 'mysql2';

}

就我而言,我为不同的用户复制了具有相同架构的数据库,因此无法在模型中进行设置。有没有办法为同一功能下的所有连接选择连接设置,以便我可以将其放入过滤器/baseController并在运行时设置连接?

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:

    一种选择是更新“database.default”键并重新连接:

    Config::set('database.default', 'mysql2');
    DB::reconnect();
    

    【讨论】:

      【解决方案2】:

      这是第三种解决方案(最后一个):http://fideloper.com/laravel-multiple-database-connections

      因此您可以将连接名称传递给函数或在控制器中设置。

      【讨论】:

      • 最后一个解决方案只更改了该模式下的连接设置。如果我连接不同的模型,我仍然需要重新设置。这比每次都设置要好,但我想要一个一劳永逸的解决方案。
      【解决方案3】:

      您可以通过这样做将默认连接更改为“mysql2”。

      DB::setDefaultConnection('mysql2');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-13
        • 2021-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多