在Laravels Eloquent中,如何获取有关系的记录?

时间:2018-09-27 18:05:23

标签: php laravel laravel-5 eloquent

我正在尝试提取具有事件关系的所有记录,这些事件的事件日期为今天。我有以下代码:

    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记录不是今天的记录,那么我不希望它返回。我只对今天活动日的记录感兴趣。

感谢您的帮助。

2 个答案:

答案 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)

您应该同时使用whereHaswith

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();