迭代返回模型的最佳方法

Posted

技术标签:

【中文标题】迭代返回模型的最佳方法【英文标题】:Best way to iterate throught returned models 【发布时间】:2021-08-31 09:46:17 【问题描述】:

我有一个名为 Drug 的表,基本上当插入药物时,默认情况下它需要 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;
        

【问题讨论】:

【参考方案1】:

您可以直接在查询中做差异:

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

【讨论】:

以上是关于迭代返回模型的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

可迭代与迭代器作为返回行为(最佳实践?)

迭代 Android 光标的最佳方法是啥?

迭代 Pandas 数据框的最佳方法?

迭代熊猫系列元素的最佳方法

迭代列表并从中删除项目的最佳方法? [关闭]

迭代文件夹和子文件夹的最佳方法