我可以使用whereHas方法查询关系存在的位置,但现在我需要获得此结果的反函数,其结果与whereHas子句中的结果不匹配.
这是我的查询:
$query->whereHas('actions', function ($query) { $query->where('actions.created_at', '>', Carbon::now()->addDays(-30)); });
这可以获得过去30天内执行的操作,但我需要获取过去30天内未执行操作的内容.
看起来我需要从关系中获取max(actions.created_at)并查看该值是否超过30天,但我不确定如何以雄辩的方式执行此操作.
注意:人与动作之间的关系是1到多,因此可能会链接多个动作记录,所以我不能只是将运算符翻转为"<="
记住whereHas
有两个以上的参数:
$query->whereHas('actions', function ($query) { $query->where('actions.created_at', '>', Carbon::now()->addDays(-30)); }, '=',0);
事实上,它还有两个,但默认设置为'> ='和'1'.因此,我们在子查询中添加参数'='和'0'(或'<'和'1'以解决它的重要性),例如'所有不在操作子集中的操作30天).
whereHas
方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Builder.html#method_whereHas