通过事务开始工作[PHP Laravel]

问题描述 投票:0回答:1

我需要在交易中触发laravel作业。

由于作业是异步的,因此有时它们会在事务提交之前完成。在这种情况下,作业无法使用ID获取相关的原始文件。 (因为该事务尚未提交,并且外部看不到更改)

[除了将这部分放在事务之外,还建议一种方法来解决此问题。

DB::beginTransaction()

...

$process = DB::table("trn_users")->insertGetId([
    "first_name" => $first_name,
    "last_name" => $last_name
]);

$job = (new SendEmailJob([
    'Table' => 'trn_users',
    'Id' => $process
]))->onQueue('email_send_job');
$this->dispatch($job);

...

DB:commit()
php laravel transactions laravel-queue laravel-jobs
1个回答
0
投票

我最近在一个项目中解决了这个问题。

dispatch()方法简单地定义了一个“缓冲”外观单例,该方法不是立即分派它,而是将作业缓冲在内存中直到事务提交。

构造'buffer'类时,它为提交和回滚事件注册一个事件侦听器,并根据触发的事件来调度或忘记缓冲的作业。

它会在实际事务级别上进行其他一些巧妙的处理,并确定是否需要立即缓冲或分派。

希望您能理解,但如果您想让我进一步介绍,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.