【发布时间】:2020-08-18 20:04:08
【问题描述】:
我有一个 Laravel 项目(主),我正在我的主项目的一个模块中使用 iframe 加载另一个 Laravel 项目(辅助)。 现在我需要做的是由主项目的不同用户为辅助项目加载不同的数据库。 如果有人可以帮助我,那就太好了?
【问题讨论】:
我有一个 Laravel 项目(主),我正在我的主项目的一个模块中使用 iframe 加载另一个 Laravel 项目(辅助)。 现在我需要做的是由主项目的不同用户为辅助项目加载不同的数据库。 如果有人可以帮助我,那就太好了?
【问题讨论】:
我就是这样做的!我必须创建一个中间件并将这个中间件添加到路由中间件组中。
class ChangeDatabase
{
public function handle($request, Closure $next)
{
if (Auth::check()) {
$database_name = Auth::user()->database;
$user_id = Auth::user()->id;
Config::set('database.connections.tenant', array(
'driver' => 'mysql',
'host' => '',
'database' => $database_name,
'username' => 'forge',
'password' => '',
'port' => '3306',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
));
Config::set('database.default', 'tenant');
$user = User::where('id', $user_id)->first();
Auth::guard()->login($user);
}
return $next($request);
}
}
然后我必须创建一个特征并习惯于所有模型。
trait DatabaseChangerTrait {
public function __construct(){
if (Auth::check()) {
$database_name = Auth::user()->database;
$user_id = Auth::user()->id;
Config::set('database.connections.tenant', array(
'driver' => 'mysql',
'host' => '',
'database' => $database_name,
'username' => 'forge',
'password' => '',
'port' => '3306',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
));
Config::set('database.default', 'tenant');
$user = User::where('id', $user_id)->first();
Auth::guard()->login($user);
}
}
}
【讨论】: