【问题标题】:Queuing multi-tenant application in Laravel在 Laravel 中排队多租户应用程序
【发布时间】:2016-08-30 11:17:34
【问题描述】:

我有一个在 Laravel 5.1 中构建的多租户应用程序。它使用一个主数据库连接来存储用户、角色、权限以及作业和 failed_jobs。此外,每个用户都有自己的数据库。

我使用一个Job类发送邮件,执行时出现如下异常:

[PDOException] SQLSTATE[3D000]:无效的目录名称:1046 未选择数据库

该类使用来自两个数据库连接(主连接和与当前用户关联的连接)的表。

在此先感谢,如果有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: queue laravel-5.1 multi-tenant job-scheduling


    【解决方案1】:

    好的,这很简单。对于任何有兴趣的人,我完全忘记在第二个连接中设置数据库。

    实际上,第二个db连接中的database字段是动态填充的,取决于经过身份验证的用户。所以,每次执行作业类时,都应该初始化database字段:

    Config::set('database.connections.second_connection.database', 'user_' . $user_id);
    // $user_id is in fact auth()->user()->id, passed as parameter
    

    这样就解决了问题。

    【讨论】:

    • 嘿@icemanblas,我遇到了类似的问题,我试图根据租户在数据库之间切换。我已经实现了一个类似的解决方案,但是我发生的事情是数据库连接没有在更短的时间间隔内切换,我的意思是如果租户 1 在其数据库连接的情况下执行了一个作业,那么在几秒钟内另一个租户将一个作业推送到数据库连接的同一个队列是即使设置了默认连接,仍然是以前的租户。有没有类似的经历?
    • @BlackBurn027 我不久前放弃了那个项目,但据我记得,我们没有遇到过这种问题,我们测试了不同的流程和场景。
    • 嗯,没关系,实际上我通过使用 DB::purge(); 解决了这个问题; :) 现在它工作得非常顺利。无论如何谢谢:D
    • @BlackBurn027 我面临着同样的问题,我必须在 laravel 工作中更改数据库。你能帮我吗?
    • 当然@mohit 详细说明您的问题或将其作为新问题发布
    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 2015-12-30
    • 2017-02-16
    • 2020-06-18
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多