首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >员工从数据库检索作业时设置数据库

员工从数据库检索作业时设置数据库
EN

Stack Overflow用户
提问于 2022-08-04 15:32:50
回答 1查看 53关注 0票数 1

我在我的Laravel 8应用程序中有两个数据库。这两个数据库的用户名和密码是相同的,但是数据库名是不同的。因此,我创建了一个中间件,它根据用户的电子邮件设置数据库名称。

问题是,我在数据库queue_connection上有一个作业,但是当工作人员试图检索作业时,中间件不会得到调用,而worker只在默认数据库中查找作业。

如何设置数据库名称,使工作人员可以从所需的数据库中检索作业,而不是默认的数据库。

中间件

代码语言:javascript
复制
public function handle(Request $request, Closure $next)
{
    $auth_email = Auth::guard('api')->user()?->email;
    if ($auth_email === 'first_user@example.com') {
        config(['database.connections.fe_mysql.database' => 'Database-1']);
    } elseif ($auth_email === 'second_user@example.com') {
        config(['database.connections.fe_mysql.database' => 'Database-2']);
    }

    return $next($request);
}

更新

Laravel请求具有默认数据库连接的数据库,在此请求期间,Auth::user()null,因为请求中没有发送访问令牌。

因此,问题是如何根据登录的电子邮件更改数据库连接。我尝试将电子邮件存储在session中,如下所示

代码语言:javascript
复制
session(['adminEmail' => \request('email')]);

现在从会话中检索此电子邮件并根据电子邮件设置数据库如下

代码语言:javascript
复制
$auth_email = session('adminEmail');
        if ($auth_email === 'first_user@example.com') {
            config(['database.connections.fe_mysql.database' => 'Database-1']);
        } elseif ($auth_email === 'second_user@example.com') {
            config(['database.connections.fe_mysql.database' => 'Database-2']);
        }
    
        return $next($request);
    }

以上代码的问题是,每当用户登录时,会话值将继续更改,因此我不能以这种方式依赖会话值。

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 21:44:21

我也被困在这个问题上,直到我意识到DB连接没有被清除。

一旦设置了新的DB配置,就需要purge连接。

DB::purge('mysql');是您要寻找的代码。

代码语言:javascript
复制
use Illuminate\Support\Facades\DB;

public function handle(Request $request, Closure $next)
{
    $auth_email = Auth::guard('api')->user()?->email;
    if ($auth_email === 'first_user@example.com') {
        config(['database.connections.fe_mysql.database' => 'Database-1']);
    } elseif ($auth_email === 'second_user@example.com') {
        config(['database.connections.fe_mysql.database' => 'Database-2']);
    }

    DB::purge('mysql');

    return $next($request);
}

此外,我还有几个问题,可以更好地回答你的情况。

当您正在用result?

  • Confirming获取email时,这已经连接到另一个DB假设这是您想要的Database-2

,您已经在Kernal.php

  • How中注册了这个中间件,queue_connection DB符合Database-1Database-2

的总体方案

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

https://stackoverflow.com/questions/73238610

复制
相关文章

相似问题

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