Laravel查询生成器-使用行中的数据与另一行中的时间进行比较

Laravel查询生成器-使用行中的数据与另一行中的时间进行比较,laravel,eloquent,query-builder,laravel-query-builder,Laravel,Eloquent,Query Builder,Laravel Query Builder,我已使用whereRaw工具完成此工作,如下所示: Reports::whereRaw('last_check_datetime < CURRENT_TIMESTAMP - INTERVAL `check_schedule_minutes` MINUTE')->get(); Reports::whereRaw('last\u check\u datetime

我已使用whereRaw工具完成此工作,如下所示:

Reports::whereRaw('last_check_datetime < CURRENT_TIMESTAMP - INTERVAL `check_schedule_minutes` MINUTE')->get();
Reports::whereRaw('last\u check\u datetimeget();
该表中有许多报告,具有不同的计划分钟数。i、 e.我希望每15分钟检查一份报告,每60分钟检查一份报告。如果
last\u check\u datetime
中的时间不早于
check\u schedule\u minutes
中的分钟数,则不应在集合中返回报告


有没有一种方法可以使用更雄辩的语法来实现同样的效果,最好是使用Carbon?

您可以在日期列上使用雄辩的
wherebeen
方法

Reports::whereween('last_check_datetime'),[Carbon::now()->subMinutes('check_schedule_minutes'),Carbon::now())->get()

我应该为你做这件事

编辑:我意识到这取决于您在进行查询之前知道
$check\u schedule\u minutes
值,您的问题是从表中读取
check\u schedule\u minutes
。 解决这一问题的一种方法是为
check\u schedule\u minutes
(如您所说的15或60分钟)制定一个预定义的标准,然后将该值传递到执行查询的函数中,并将其添加到您的条件中:

$check\u schedule\u minutes=60;
报告::whereBetween('last_check_datetime',[Carbon::now()->subMinutes($check_schedule_minutes),Carbon::now())
->式中('check_schedule_minutes',$check_schedule_minutes)
->get();

Tbh我认为你在这里做的是对的。问题就在你的问题中——你想合并PHP/MySQL语法,但数据是在MySQL中。因此,如果不先获取所有记录,然后进行检查,那么您所做的是正确的,并且不是真正可以避免的。但是,如果您确实想要更雄辩的构建解决方案,请参见:

Reports::where('last_check_datetime', '<', DB::raw('CURRENT_TIMESTAMP - INTERVAL `check_schedule_minutes` MINUTE'))->get();

报告::其中('last_check_datetime','谢谢你这么做。$check_schedule_minutes实际上可以是15分钟到一个月的任何时间,所以我真的需要一种方法能够从传单上的每一行数据库中提取出来。谢谢你。我同意-我认为这真的很相似。我的目标是让碳助手进入查询,但确实如此这似乎不可能。