我正在尝试提取具有事件关系的所有记录,这些事件的事件日期为今天。我有以下代码:
EventStaffStation::with([
'event' => function($query) {
$query->where('event_date', Carbon::now()->format('d-m-Y'));
}
])->where([
'staff_id' => auth()->user()->id
])->has('event')->get()
这给了我一个记录event_staff_stations,但是它将事件关系设置为null。如果关系为空,我不希望返回记录。
基本上,如果event_staff_station记录不是今天的记录,那么我不希望它返回。我只对今天活动日的记录感兴趣。
感谢您的帮助。
答案 0 :(得分:6)
您应该使用:
export default withRouter((connect(mapStateToProps, mapDispatchToProps)(App)));
如果要基于关系存在/条件获取记录,则应使用EventStaffStation::whereHas(
'event' , function($query) {
$query->where('event_date', Carbon::now()->format('d-m-Y'));
}
)->where([
'staff_id' => auth()->user()->id
])->get()
而不是has/whereHas
。当然,在上面的查询中,您还可以添加with
,如果需要,它会急于加载您想要的任何关系。
答案 1 :(得分:1)
您应该同时使用whereHas
和with
。
whereHas
将检查该关系是否存在,with
将返回带有关系对象的记录。
EventStaffStation::whereHas(
'event' , function($query) {
$query->where('event_date', Carbon::now()->format('d-m-Y'));
}
)->with('event')
->where([
'staff_id' => auth()->user()->id
])->get();