Php 拉维尔重复延迟工作

Php 拉维尔重复延迟工作,php,mysql,laravel,memory-leaks,delayed-job,Php,Mysql,Laravel,Memory Leaks,Delayed Job,我正在使用MySQL编写Laravel json api。我想做的是,每当用户创建记录时,我想每24小时对该记录执行一次操作,直到管理员对该记录进行一些更改。因此,这项工作平均会重复10-15次。这是我的工作: <?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue;

我正在使用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));
    }
}

为什么不为此在数据库中创建一个单独的表呢

您可以保留订单ID的状态(由管理员检查/未检查)。或者只是把新的订单号放在那里,在管理员检查后删除它。因此,您将只使用作业查看是否存在未检查的ID。或者类似的


我认为这种方法更容易预测,也不太容易出错。

为什么不为此在数据库中创建一个单独的表呢

您可以保留订单ID的状态(由管理员检查/未检查)。或者只是把新的订单号放在那里,在管理员检查后删除它。因此,您将只使用作业查看是否存在未检查的ID。或者类似的


我认为这种方法更容易预测,故障更少。

听着,我只需要知道我的方法的问题。您的实现应该可以很好地工作。每次创建RoadOrderPrivationHandler时都会创建新作业,所以没有任何问题。如果您担心在RoadOrderPrivationHandler中创建RoadOrderPrivationHandler,请尝试以下代码(并查看它是否工作正常):`class Foo{public function tryThis(){$newOne=new Foo();$newOne->printFoo();}public function printFoo(){echo'Foo';}}$Foo=new Foo()$foo->tryThis()`听着,我只需要知道我的方法的问题。你的实现应该很好。每次创建RoadOrderPrivationHandler时都会创建新作业,所以没有任何问题。如果您担心在RoadOrderPrivationHandler中创建RoadOrderPrivationHandler,请尝试以下代码(并查看它是否工作正常):`class Foo{public function tryThis(){$newOne=new Foo();$newOne->printFoo();}public function printFoo(){echo'Foo';}}$Foo=new Foo()$foo->tryThis()`