【发布时间】:2017-01-05 01:24:31
【问题描述】:
我正在使用 Laravel-5.2 开发一个多租户应用程序 每个租户都有一个单独的数据库。每个租户都有其单独的子域。我使用他们的子域检测租户。
我设置了模型Tenant 和DatabaseConnection,其中Tenant hasOne DatabaseConnection 和DatabaseConnection belongsTo Tenant。
租户的数据库连接从BeforeMiddleware 动态设置。这些都很好用。
现在我想为租户使用artisan tinker。但如果我运行php artisan tinker,它会连接到Tenant,其数据库凭据存在于.env 文件中。
所以我正在尝试为此创建一个控制台命令。这是我到目前为止所取得的成就。
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?
【问题讨论】:
-
您是否尝试向特定租户发出
tinker的控制台命令? -
是的。这样我就不必在运行
tinker之前不断更改.env文件中的数据库凭据。
标签: php laravel laravel-5.2 multi-tenant