有没有办法为laravel 4中相同功能下的所有连接设置数据库连接设置?

时间:2015-05-04 04:02:20

标签: php laravel laravel-4 eloquent

假设我在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';

}

就我而言,我为不同的用户提供了具有相同模式的重复数据库,因此无法在模型中进行设置。有没有办法在同一个函数下为所有连接选择连接设置,以便我可以将它放在filter / baseController中并在运行时设置连接?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以将默认连接更改为' mysql2'就这样做。

DB::setDefaultConnection('mysql2');