首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多租户环境下的Laravel修补机

多租户环境下的Laravel修补机
EN

Stack Overflow用户
提问于 2016-08-29 05:28:57
回答 1查看 1K关注 0票数 3

我正在使用Laravel-5.2开发一个多租户应用程序,每个租户都有一个单独的数据库。每个租户都有各自的子域。我用他们的子域检测租户。

我设置了TenantDatabaseConnection模型,其中Tenant hasOne DatabaseConnectionDatabaseConnection belongsTo Tenant。租户的DB连接是从BeforeMiddleware动态设置的。这些都很好用。

现在我想对租户使用artisan tinker。但是,如果我运行php artisan tinker,它将连接到TenantTenant的DB凭据存在于.env文件中。

因此,我试图为同样的命令创建一个控制台命令。以下是我到目前为止所取得的成就。

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-29 05:37:59

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

代码语言:javascript
复制
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');

看看这个对你有用吗。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39199032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档