我可以通过使用whereHas方法查询关系存在的位置,但现在我需要得到这个结果的倒数,其中结果与where Has子句中的结果不匹配。
这是我的问题:
$query->whereHas('actions', function ($query) {
$query->where('actions.created_at', '>', Carbon::now()->addDays(-30));
});
这得到了过去30天内采取的措施,但我需要得到过去30天未采取的措施。
我似乎需要从关系中获得最大值(actions.created_at),看看这个值是否在30天前,但我不确定如何用雄辩来做到这一点。
注意:人和动作之间的关系是1对多,所以可能有多个动作记录链接,所以我不能只将运算符翻转为"<="
记住whereHas
有两个以上的参数:
$query->whereHas('actions', function ($query) {
$query->where('actions.created_at', '>', Carbon::now()->addDays(-30));
}, '=',0);
事实上,它还有两个,但默认情况下设置为">="one_answers"1"。因此,我们添加了参数"="one_answers"0"(或"<",以及"1"),以在子查询中转换它,如"不在30天内添加的操作子集中的所有操作"。
whereHas
方法:http://laravel.com/api/4.1/Illuminate/Database/Eloquent/Builder.html#method_whereHas
难道不能将where查询更改为小于或等于吗?
$query->whereHas('actions', function ($query) {
$query->where('actions.created_at', '<=', Carbon::now()->addDays(-30));
});
试试这个[伪代码]:
$actions = AppModelsAction::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;
}
}
然后,您可以在视图中使用$exceedingThirty
数组。
或
试试这个:
$sql = "DATEDIFF(actions.created_at, '".date('Y-m-d')."' ) > ". 30;
return AppModelsAction::whereRaw( $sql )->get();
看看,如果有帮助的话。