我正在使用Laravel-5.2开发一个多租户应用程序。每个租户都有一个独立的数据库和子域名。我使用他们的子域名来检测租户。
我已经设置了模型Tenant和DatabaseConnection,其中Tenant hasOne DatabaseConnection,DatabaseConnection belongsTo Tenant。通过BeforeMiddleware动态设置了租户的DB连接。这些工作得非常好。
现在我想为租户使用artisan tinker。但是如果我运行php artisan tinker,它会连接到.env文件中存在DB凭据的Tenant。
因此,我正在尝试制作相同的控制台命令。以下是我目前实现的内容。
我已经设置了模型Tenant和DatabaseConnection,其中Tenant hasOne DatabaseConnection,DatabaseConnection belongsTo Tenant。通过BeforeMiddleware动态设置了租户的DB连接。这些工作得非常好。
现在我想为租户使用artisan tinker。但是如果我运行php artisan tinker,它会连接到.env文件中存在DB凭据的Tenant。
因此,我正在尝试制作相同的控制台命令。以下是我目前实现的内容。
class ClientTinker extends Command {
protected $name = 'cdb:tinker';
public function fire()
{
// get the subdomain
$subdomain = $this->argument('subdomain');
// get the client
$client = Tenant::whereSubdomain($subdomain)->first();
$connection = $client->databaseConnection();
// $connection contains the database server, database name, user name, and password.
// dynamically set connections here. *How?*
...
// *I need to call tinker here. How?*
}
protected function getArguments()
{
return [
['subdomain', InputArgument::REQUIRED, 'Subdomain of the tenant.'],
];
}
那我如何为特定租户设置数据库连接,以及如何运行tinker?