2016-02-20 80 views
0

取得不相关的项目是否有可能得到不涉及到具体的实例中的所有项目,在许多人在Laravel许多关系?Laravel:在一个多对多的关系

例子:

我有两个型号,UserPet。他们有多对多的关系,因为用户可以拥有很多宠物,但宠物可以属于更多的用户。

但我希望宠物的列表,其中一个特定的用户没有。

这怎么可能?

编辑 以上仅仅是一个例子,所以没有涉及到我的当前任务。更简单的解释与用户和宠物。但要注明:

PETS TABLE: 
ID TYPE 
1 Dog 
2 Cat 
3 Rabit 
4 Horse 
5 Rat 
6 Bat 
7 Bird 

USERS TABLE: 
ID NAME 
1 Martin 
2 Peter 
3 Viggo 

PET_USER TABLE: 
ID PET USER 
1 1 1 
2 3 1 
3 5 1 

然后马丁有一只狗,一只兔子和一只老鼠。

但我希望宠物的名单,他没有: 猫,马,蝙蝠和鸟类

+0

怎么你'pets'表是什么样子? –

+0

你可以给一个特定的用户是不是有宠物列表的一个例子。 – oseintow

回答

3

你可以试试这个(你的问题听起来有点混乱,我的寿):

$pets = Pet::with('users')->whereDoesntHave('users', function($query) use ($id) { 
    $query->where('user', $id); 
})->get(); 

而且,试试这个,以及(如果你想):

$pets = Pet::with('users')->whereHas('users', function($query) use ($id) { 
    $query->where('user', '!=', $id); 
})->get(); 
0

有没有从laravel函数来运行此开箱。

您必须手动加入这个:

$pets = Pet::leftJoin('pet_user', function($join) use ($userId){ 
     $join->on('pets.id', '=', 'pet_user.pet_id'); 
     $join->on('pet_user.user_id', '=', \DB::raw("'".$userId."'")); 
    })->whereNull('pet_user.pet_id')->get();