迭代返回模型的最佳方法

Best way to iterate throught returned models

我有一个名为 Drug 的 table 基本上,当插入药物时,默认情况下需要 is_accepted 0,因此需要由管理员接受。 如果 is_accepted 值为 1

,则所有药物都会显示在网站上

我创建了一个命令 DeleteunacceptedDrugs,每 12 小时 运行。

这条命令会获取所有is_accepted值为0的药物,并查看它们的等待时间(处于等待状态的时间)

public function handle()
    {
        $drugs =  Drug::where('is_accepted',0)->get();

        for($i=0;$i<count($drugs);$i++){
            if($drugs[$i]->getDuration() >= 12){
                $drugs[$i]->delete();
            }
        }

    }

这段代码工作正常,删除了所有等待时间 (current_date - created_at) 高于 12 的药物,但代码对我来说看起来很难看,有没有办法通过药物数组进行更好的迭代方法

如有需要

 public function getDuration(){
    
            $start = Carbon::parse($this->created_at);
            $end = now();
            $hours = $end->diffInHours($start);
            return $hours;
        }

您可以直接在查询中进行比较:

Drug::where('is_accepted',0)->whereRaw('HOUR(TIMEDIFF(created_at, NOW())) > 11')->delete();