问题描述
在多租户 Laravel 应用中,每个租户都有自己的数据库连接。因此,在用户选择了他的数据库后,我想使用 Auth::loginUsingId
对用户进行身份验证。尽管如此,无论我做什么,我都无法将用户模型的连接更改为另一个默认值。
如果我在模型中设置了连接,它会连接到特定的数据库,但我希望这是动态完成的。
有没有办法动态指定 Laravel 的身份验证应该用于身份验证的连接?
解决方法
您可以像这样在 config/database.php
文件中定义另一个连接:
return array(
'connections' => array(
'mysql' => array(
'driver' => 'mysql','host' => 'localhost','database' => 'database1','username' => 'user1','password' => 'pass1'
'charset' => 'utf8','collation' => 'utf8_unicode_ci','prefix' => '',),'second_db_connection' => array(
'driver' => 'mysql','database' => 'database2','username' => 'user2','password' => 'pass2'
'charset' => 'utf8',)
并将用户模型更改为如下所示:
class User extends Model {
protected $connection= 'second_db_connection';
}
,
在对用户进行身份验证之前,仅使用 Conifg::set 临时更改当前请求的数据库连接
$db = "database_name";
Config::set("database.connections.mysql.database",$db);