我正在使用Laravel-5.2开发一个多租户应用程序,每个租户都有一个单独的数据库。每个租户都有各自的子域。我用他们的子域检测租户。
我设置了Tenant和DatabaseConnection模型,其中Tenant hasOne DatabaseConnection和DatabaseConnection belongsTo Tenant。租户的DB连接是从BeforeMiddleware动态设置的。这些都很好用。
现在我想对租户使用artisan tinker。但是,如果我运行php artisan tinker,它将连接到Tenant,Tenant的DB凭据存在于.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.'],
];
}那么,如何设置特定租户的DB连接,以及如何运行tinker?
发布于 2016-08-29 05:37:59
在获得$connection变量后,在fire()中执行以下操作
DB::purge('mysql');
Config::set('database.connections.mysql.host', $connection->server);
Config::set('database.connections.mysql.database', $connection->database);
Config::set('database.connections.mysql.username', $connection->username);
Config::set('database.connections.mysql.password', $connection->password);
// I am assuming the variable names in $connection object here, as you have not specified them in your question.
Artisan::call('tinker');看看这个对你有用吗。
https://stackoverflow.com/questions/39199032
复制相似问题