gpt4 book ai didi

php - Multi-Tenancy 环境中的 Laravel 修补程序

转载 作者:搜寻专家 更新时间:2023-10-31 21:02:32 24 4
gpt4 key购买 nike

我正在使用 Laravel-5.2 开发 Multi-Tenancy 应用程序每个租户将有一个单独的数据库。每个租户都有其独立的子域。我检测到租户使用他们的子域。

我设置了模型 TenantDatabaseConnection,其中 Tenant hasOne DatabaseConnectionDatabaseConnection 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?

最佳答案

fire() 中获得 $connection 变量后,执行此操作

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');

看看这是否适合您。

关于php - Multi-Tenancy 环境中的 Laravel 修补程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39199032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com