Laravel搜索不存在关系的地方

von*_*nec 5 php laravel eloquent

我可以使用whereHas方法查询关系存在的位置,但现在我需要获得此结果的反函数,其结果与whereHas子句中的结果不匹配.

这是我的查询:

$query->whereHas('actions', function ($query) {
    $query->where('actions.created_at', '>', Carbon::now()->addDays(-30));
});
Run Code Online (Sandbox Code Playgroud)

这可以获得过去30天内执行的操作,但我需要获取过去30天内未执行操作的内容.

看起来我需要从关系中获取max(actions.created_at)并查看该值是否超过30天,但我不确定如何以雄辩的方式执行此操作.

注意:人与动作之间的关系是1到多,因此可能会链接多个动作记录,所以我不能只是将运算符翻转为"<="

Ama*_*san 9

记住whereHas 两个以上的参数:

$query->whereHas('actions', function ($query) {
    $query->where('actions.created_at', '>', Carbon::now()->addDays(-30));
}, '=',0);
Run Code Online (Sandbox Code Playgroud)

事实上,它还有两个,但默认设置为'> ='和'1'.因此,我们在子查询中添加参数'='和'0'(或'<'和'1'以解决它的重要性),例如'所有不在操作子集中的操作30天).

whereHas方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Builder.html#method_whereHas