Laravel Artisan命令无法正确完成

时间:2018-11-29 11:10:18

标签: php laravel artisan

我有一个工匠命令来处理表中的作业。 reverseMatchSystemItem()方法依次处理特定供应商环境中的所有产品。对于特定的供应商(需要最长时间),该命令尚未完成。在为所有供应商完成所有操作之后(我也仅与一个供应商进行了尝试),并且删除了不活动的作业后,它继续运行(光标闪烁,错误日志为空!),有趣的是,CPU使用率不断提高。

public function handle()
{
    $jobs = ReverseMatchProductJobs::all();
    try {
        foreach ($jobs as $job) {
            if ($job->object_type == 'product') {
                foreach (Supplier::all() as $supplier) {
                    $supplier->api()->reverseMatchSystemItem(Item::find($job->object_id));
                }
            } elseif ($job->object_type == 'size') {
                foreach (Supplier::all() as $supplier) {
                    $supplier->api()->reverseMatchSystemItemOption(ItemOption::find($job->object_id));
                }
            }
            $job->active = false;
            $job->save();
        }
        DB::table('reverse_match_product_jobs')->where('active', false)->delete();
        // die();
    } catch (Exception $ex) {
        var_dump($ex);
    }
}

如果我在delete()操作之后取消对die()的注释,它会正确完成,但是我想知道它是否会杀死两者之间的进程。如何更好地调试此功能以了解问题所在?

编辑:同一过程与Tinker完美配合。

1 个答案:

答案 0 :(得分:1)

这是在不直接修改查询的情况下在Stackoverflow上很难回答的问题之一。但是,您的问题是如何进行调试,因此我将重点介绍这一点:

我将从以下内容开始:

  • 注释掉内部2个foreach循环,但保留actionsave部分。
  • 完成了吗?
  • 如果确实完成了,您就会知道这些内部循环有些不合理。
  • 如果未完成,请尝试注释掉外循环,并检查其是否完成
  • 依此类推

除此之外,没有更多信息就无法做很多事情