在复数关系中使用where条件,在laravel中加载


Using a where condition in multtiple relation eager load in laravel

我有三种型号的

用户创建了一个会议,其他成员被邀请参加该会议

我需要获得会议,其中包含为被邀请参加该会议的用户创建会议的用户的详细信息

所以我有一个会议桌

模型会议

function creator() {
     return $this->belongsTo( 'User', 'created_by' );
}
function attendees() {
    return $this->hasMany('MeetingAttendees');
}

模型用户

function invitedMeetings() {
    return $this->hasMany( 'MeetingAttendees' );
}

模型会议与会者

function meeting() {
    return $this->belongsTo('Meeting');
}

最后是加载关系的代码。其中$userUser Object

$user->invitedMeetings()
                ->with(['meeting.creator' => function ($query) use ($status) {
                    if (!empty($status)) {
                        $query->where('meetings.status', '=', $status);
                    }
                }])->get();

我只需要获得$status具有特定值的会议,但where是向用户表添加查询。我似乎无法在关系负载中添加where。我怎样才能做到这一点?

您应该能够更轻松地完成

$user->invitedMeetings()
     ->with(['meeting', 'meeting.creator'])
     ->where('status', '=', 'accepted')
     ->get()
//If you want to do a check on another table
$user->invitedMeetings()
     ->with(['meeting', 'meeting.creator'])
     ->where('meeting.status', '=', 'accepted')
     ->get()

看看这里,可以更好地理解嵌套的雄辩关系:具有某些约束的eloquent嵌套关系

我已经找到了答案,所以

$user->invitedMeetings()
                ->with(['meeting.creator' => function ($query) use ($status) {
                    if (!empty($status)) {
                        $query->where('meetings.status', '=', $status);
                    }
                }])->get();

应该改为

$user->invitedMeetings()
                ->with(['meeting' => function ($query) use ($status) {
                     $query->where('meetings.status', '=', $status)->with('creator');
            }])->get();

这解决了我的问题