具体结果在多对多关系中

时间:2015-03-25 12:30:17

标签: php laravel many-to-many eloquent relationship

我希望在这里找到答案, 我有一个组,用户和参与者表,组和参与者链接到具有一对多关系的用户。 Np与此。

现在我有一个group_participant表,它应该将参与者链接到一个组,有3列:

  1. ID
  2. GROUP_ID
  3. participant_id
  4. 我想要做的是获取不属于该组的参与者列表,我可以轻松获得整个列表,但我想过滤这一个以便只获得那些不相关的列表小组。

    我有很多关系,我有我的Group.php模型,其中包含:

        public function participantsGroup()
    {
        return $this->belongsToMany('App\Participant');
    }
    

    如果我这样做:

    public function participants(){
    
        $group = Group::find('group_id_there')->participantsGroup;
        return $group;
    }
    

    我正在获得与该群组相关的参与者列表,但我想要的是与此相反,请问我该怎么做?

1 个答案:

答案 0 :(得分:0)

要实现此目的,您应该使用whereNotIn()方法,并传递当前参与者的数组。例如:

// Fetch the participants in the group
$groupParticipantsId = Group::find(1)->participantsGroup()->lists('participant_id');
// Query to get all participants that are not in that group
$participantsNotInGroup = App\Participant::whereNotIn($groupParticipantsId)->get();

最佳做法是在类上创建一个对您更有意义的scope,我将在App\Participant类创建范围:

public function scopeNotInGroup($query, App\Group $group) {
    $participants = $group->participantsGroup()->lists('participant_id');
    return $query->whereNotIn($participants);
}

然后在您的应用中的任何位置都可以执行此操作:

// Fetch the participants in the group
$group = Group::find(1);
// Query to get all participants that are not in that group
$participantsNotInGroup = App\Participant::notInGroup($group)->get();