Php 在laravel 4中,是否有办法为同一功能下的所有连接设置db连接设置?
假设我在app/config/database.php中有以下数据库设置Php 在laravel 4中,是否有办法为同一功能下的所有连接设置db连接设置?,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,假设我在app/config/database.php中有以下数据库设置 'default' => 'mysql', 'connections' => array( # Our primary database connection 'mysql' => array( 'driver' => 'mysql', 'host' => 'host1', 'database' =>
'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并在运行时设置连接?这里是第三种解决方案(最后一种):
因此,您可以将连接名称传递到函数中或在控制器中进行设置。一个选项是更新“database.default”键并重新连接:
Config::set('database.default', 'mysql2');
DB::reconnect();
只需执行此操作,即可将默认连接更改为“mysql2”
DB::setDefaultConnection('mysql2');
上一个解决方案仅更改了该模式下的连接设置。如果我连接了不同的型号,我仍然需要重新设置。这比每次设置都好,但我想要一个一劳永逸的解决方案。