Php 不存在关系的Laravel搜索

Php 不存在关系的Laravel搜索,php,laravel,eloquent,Php,Laravel,Eloquent,我可以使用whereHas方法查询关系存在的位置,但是现在我需要得到这个结果的倒数,结果与whereHas子句中的结果不匹配 我的问题是: $query->whereHas('actions', function ($query) { $query->where('actions.created_at', '>', Carbon::now()->addDays(-30)); }); 这会得到过去30天内采取行动的事情,但我需要得到过去30天内没有采取行动的事情

我可以使用whereHas方法查询关系存在的位置,但是现在我需要得到这个结果的倒数,结果与whereHas子句中的结果不匹配

我的问题是:

$query->whereHas('actions', function ($query) {
    $query->where('actions.created_at', '>', Carbon::now()->addDays(-30));
});
这会得到过去30天内采取行动的事情,但我需要得到过去30天内没有采取行动的事情

似乎我需要从关系中获取最大值(actions.created_at),并查看该值是否大于30天前,但我不确定如何使用Elotent做到这一点


注意:person和action之间的关系是1对多,因此可能会链接多个action记录,所以我不能将操作符翻转为“你不能将where查询更改为小于或等于吗

$query->whereHas('actions', function ($query) {
    $query->where('actions.created_at', '<=', Carbon::now()->addDays(-30));
});
$query->whereHas('actions',function($query){

$query->where('actions.created_at',”试试这个[伪代码]:

$actions = App\Models\Action::all();
foreach($actions as $actionArray){
    $actionCreatedAt = new Carbon($actionArray->created_at);
    $now = Carbon::now();
    $difference = $actionCreatedAt->diff($now)->days;
    if($difference>30){
       $exceedingThirty[] = $actionArray;
    } else {
       continue;
    }
}
然后,您可以在视图中使用
$ExceedThirty
数组

试试这个:

$sql = "DATEDIFF(actions.created_at, '".date('Y-m-d')."' ) > ". 30;
return App\Models\Action::whereRaw( $sql )->get();

如果有帮助,请参阅。

记住
whereHas
有两个以上的参数:

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

事实上,它还有两个,但是默认情况下它被设置为'>='和'1'。因此我们添加了参数'='和'0'(或者“这不起作用,因为人和动作之间的关系是1对多。这意味着这将返回30天前创建动作的人。谢谢。我知道我可以使用循环,但我试图避免使用循环,如果可能的话。啊!谢谢,我没有意识到有额外的参数,因为在e.令人敬畏的解决方案