在我的laravel 8应用程序中,我有三个数据库连接,即Database-0、Database-1、Database-2。
Database-0用于对用户进行身份验证,因此它具有users表,而Laravel Auth方法使用此连接检索用户,因为我已经在passport配置文件中设置了它。Database-1和Database-2连接用于除身份验证以外的所有其他目的。
在我的users表中,只有两个用户使用电子邮件first_user@example.com和second_user@example.com
当用户使用first_user@example.com登录时,应该使用Database-1,如果用户使用second_user@example.com登录,则应该使用Database-2。
为了实现这一点,我创建了一个中间件,并将其注册到$middleware组中,以便为所有请求运行。在这个中间件中,我检查登录的用户电子邮件,并在此基础上设置数据库连接。
到现在为止,一切都很完美。
现在,我有一个工作是排队,我使用database作为我的QUEUE_CONNECTION。所以我的工作存储在数据库jobs表中。我已为处理此职务配置了主管。
现在的问题是,当主管进行查询来检索作业时,我的中间件没有被调用,它会抛出以下错误
invalid catalog name: 1046 No database selected (SQL: select * from作业where ....)
因此,我的问题是如何设置数据库连接,以便主管在检索作业时从数据库中进行选择?
中间件
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);
}主管配置
[program:queue-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/laravel-project/artisan queue:work --queue=admin
autostart=true
autorestart=true
user=root
numprocs=8
redirect_stderr=true
stopwaitsecs=7200
stdout_logfile=/var/www/html/laravel-project/worker.log发布于 2022-07-26 10:49:12
使用config()函数设置额外的或覆盖现有的连接设置。
config(['database.connections.mynewconnection' => {settings here}]);请记住,这些设置是缓存的。因此,当您需要使用新设置时,清除要使用的连接的DB缓存。
DB::purge('mynewconnection');还可以操作所使用的默认连接。如果您希望在不同的连接上使用迁移,并在使用的连接中使用迁移表来跟踪它们,这可能会派上用场。或者其他很酷的东西..。
DB::setDefaultConnection('mynewconnection');https://stackoverflow.com/questions/73121098
复制相似问题