2016-09-08 67 views
1

我有3個型號:用戶,寵物和診所。LARAVEL - 如何創建3個模型間接關係

讓我們假設這些表格:用戶,寵物和診所。關係是,一個用戶可以有多個寵物,一個寵物只有一個診所。

在桌上的「寵物」我有一個FK的user_id和另一個clinic_id。

我想要做的事,如:

$user->clinics(); 

上的用戶模型返回所有​​與用戶相關聯的不同診所。現在我只能這樣做:

$user->pets()->with('clinics); 

但我想只返回不同的診所。

用戶模式:

public function pets() 
{ 
    return $this->hasMany('Petable\Models\Pet', 'user_id', 'id'); 
} 

寵物模式:

public function clinic() 
{ 
    return $this->belongsTo('Petable\Models\Clinic', 'clinic_id', 'id'); 
} 

什麼建議嗎?

+0

你是什麼意思'只返回不同clinics'?你能詳細說明一下嗎? –

+0

也許像'$ user-> pets() - > with('clinics') - > distinct() - > get()' –

+0

我想通過寵物返回與用戶有關的所有診所。例如:如果我在同一診所有兩個寵物,$ user-> clinics();應該返回1個診所。如果我在2個不同的診所有2只寵物,它應該返回2個診所。 –

回答

1

下應該足夠了:

public function clinics() 
{ 
    return $this->belongsToMany('Petable\Models\Clinic', 'user_pets')->distinct(); 
} 

然後這使您可以撥打

$user->clinics(); 
+0

非常感謝,它與您的最後解決方案:)「小」的問題是,它是兩次返回同一診所..任何方式來防止重複? –

+0

拋出' - > distinct()',查看更新後的答案。 –

+0

它的工作原理! :) 謝謝。 –