2015-03-25 57 views
0

我希望在這裏找到答案, 我有一個組,用戶和參與者表,組和參與者通過一對多關係鏈接到一個用戶。 與那個Np。多對多關係中的具體結果

現在我有一個group_participant表,這是應該的參與者鏈接到一個組,有3列:

  1. ID
  2. GROUP_ID
  3. participant_id

我想什麼要做的是獲得不屬於組的參與者名單,我可以很容易地得到整個名單,但我想過濾這個名單,以便只得到那些與組無關的名單。

我有點堅持了多對多的關係,我有我的Group.php模型,包含:

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

如果我這樣做:

public function participants(){ 

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

,我發現了與此組相關的參與者列表,但我想要的是與此相反的,請問我該怎麼做?

回答

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

感謝它完美的作品!正是我期望的 – Azilhan 2015-03-25 14:07:25

+0

@Azilhan很高興它幫助!如果這是正確的答案,請將其標記爲好答案,然後投票! :) – gpopoteur 2015-03-25 14:11:13

+0

是的,謝謝,只是我有一個最後一個小問題,最後一個問題。組與用戶相關聯,如參與者,因此此解決方案顯示所有參與者事件中未鏈接到特定用戶的事件,而不涉及與會者表的user_id。所以完美的是顯示參與者附加到我想要的用戶,我不知道我是否解釋自己很好.. – Azilhan 2015-03-25 14:21:10

相關問題