我在database.php中如下配置:Laravel 4 equolent - 如何动态更改默认数据库?
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__.'/../database/production.sqlite',
'prefix' => '',
),
'mysql-primary' => array(
'driver' => 'mysql',
'host' => 'host1',
'port' => '3306',
'database' => 'test',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'mysql-slave' => array(
'driver' => 'mysql',
'host' => 'host2',
'port' => '3306',
'database' => 'test',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
'default' => 'mysql-primary',
)
我想什么来实现从主DB切换到从DB中不可用的情况下比方说,用户尝试登录:
$user = User::where('username', '=', $username)->first();
我想在这里,如果有PDOException(这是应该在不可用的情况下,抛出)切换默认数据库并重试操作。我知道它可能在用户模型中,但我想切换到所有模型。
我都没有成功尝试:
App::error(function(PDOException $exception)
{
Log::error("Error connecting to database: ".$exception->getMessage());
DB::setDefaultConnection('mysql-slave');
});
在filters.php
'default' => getDatabase()
function getDatabase()
{
try{
DB::connection('mysql-master')->getDatabaseName();
}catch(PDOException $e){
return 'mysql-slave';
}
return 'mysql-master';
}
在database.php中
两个不工作。 Laravel 4中有这种行为吗?