我正试图让我的cron在future 7天内只收到Projects
封将再次出现/续费的邮件,以发送提醒邮件.我刚刚发现我的逻辑不太正确.
我目前有一个疑问:
$projects = Project::where(function($q){
$q->where('recur_at', '>', date("Y-m-d H:i:s", time() - 604800));
$q->where('status', '<', 5);
$q->where('recur_cancelled', '=', 0);
});
然而,我意识到我需要做的是:
Psudo SQL:
SELECT * FROM projects WHERE recur_at > recur_at - '7 days' AND /* Other status + recurr_cancelled stuff) */
在Laravel 4中,我应该如何做到这一点,并且使用DATETIME数据类型,我只使用时间戳做过这类事情.
Update:
在使用下面的代码后,Stackoverflow成功地解决了这个问题,当您可以从上下文中提取代码位并查看它们时,Stackoverflow也会有所帮助.
$projects = Project::where(function($q){
$q->where(DB::raw('recur_at BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()'));
$q->where('status', '<', 5);
$q->where('recur_cancelled', '=', 0);
});
Updated Question:在Laravel/Eloquent中有更好的方法吗?
Update 2:
在进一步测试后,第一个解决方案没有得到正确的结果,我现在已经解决并测试了以下解决方案:
$projects = Project::where(function($q){
$q->where('recur_at', '<=', Carbon::now()->addWeek());
$q->where('recur_at', '!=', "0000-00-00 00:00:00");
$q->where('status', '<', 5);
$q->where('recur_cancelled', '=', 0);
});