我正在使用MySQL编写Laravel json API。我想做的是,每当用户创建记录时,我想每24小时对此记录执行一些操作,直到管理员对此记录进行一些更改。因此,平均而言,这项工作将重复10-15次。这是我的工作:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Http\Models\Orders\RoadOrder;
class RoadOrderEprirationHandler implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $order_id;
public function __construct($order_id)
{
$this->order_id = $order_id;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$order = RoadOrder::findOrFail($this->order_id);
//do some tasks and if I need to run this cycle again :
$roadOrderEprirationHandler = new RoadOrderEprirationHandler($order->id);
$roadOrderEprirationHandler->dispatch($order->id)->delay(now()->addHours(24));
}
}
因此,如您所见,如果管理员未修改记录,那么我将在上一个作业完成后启动作业,并且我需要再次运行循环。经过几个周期后,我将不再运行作业,因此它将完成。
我的问题:
此实现中有问题吗?也许我做错了事,或者可能发生了某种类型的内存泄漏(因为我一次又一次地在job内创建job)。我可以编写此代码,但我需要确保此实现不会导致某种类型的错误或错误。
答案 0 :(得分:0)
为什么不为此目的在数据库中创建单独的表?
您可以保留order_ids的状态(由admin选中/未选中)。或者只是将新的order_id放在此处,并在管理员检查后将其删除。因此,您将仅使用作业来查看是否存在任何未检查的ID。或某种。
我认为这种方法更具可预测性,并且没有太多错误。