我有一个项目,当我的用户进行注册时,我的项目默认情况下连接到我的主数据库公共模式。
并且当用户成功注册后,我会创建一个事件来发送电子邮件,这是事件的侦听器:
class WelcomeNewCompanyListener implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle($event)
{
$data = array (
'name' => $event->company['name'],
'email' => $event->company['email'],
);
$beautymail = app()->make(\Snowfire\Beautymail\Beautymail::class);
$beautymail->send('emails.welcome', $data, function($message) use ($data)
{
$message
->from('[email protected]', '44 Online')
->to($data['email'], $data['name'])
->subject('Bem vindo a 44 Online!');
});
}
}
[当我使用与公众相同的模式时,它可以很好地工作,但是如果我提出一个需要更改租户模式的请求,并且用户根据每个示例进行了ResetPasswordEvent,则此操作很好。
我的项目在这里更改了中间件的连接:
public function reconnect($companyInfo) {
DB::purge('tenant');
Config::set('database.connections.tenant.schema', $companyInfo[0]->db_schema);
DB::reconnect('tenant');
Schema::connection('tenant')->getConnection()->reconnect();
}
问题是,当用户使ResetPasswordEvent我的项目完成工作,但他正在从租户上进行数据库操作时,不是针对主表,我试图在句柄后放置重新连接但不起作用,它坚持要求从租户将作业插入数据库。我该怎么办?
当我在手柄上建立此连接时
DB::purge('tenant');
Config::set('database.connections.tenant.schema', 'public');
DB::reconnect('tenant');
Schema::connection('tenant')->getConnection()->reconnect();
我得到这份失败的工作,并且不使用任何连接
PDOException: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "qu_users" does not exist
LINE 1: select * from "qu_users" where "qu_users"."users_id" is null...
^ in
发生了什么?
这样,连接名称应该在handle()中可用,并且您可以在输入handle()函数之后更改连接。
在开始时,它将需要主要连接,因为您的队列工作者可能无论如何都在该连接上运行。