2014-09-01 73 views
0

我無法找到相應的文檔。Laravel - 通過另一個相關模型

我有一個User模型,每個User可以與Site有多對多的關係。我試圖找出如何獲得User之間的關係。

例如,一個User可能是Site所有者,另一個可能是Client。如果我擁有所有者對象,我如何檢索與所有者或個人相關聯的Client的數組。

我使用

public function clients() { 
    return $this->hasManyThrough('User', 'Site'); 
} 

然而,這仍然返回該我無法篩選出當前用戶嘗試。

我不確定我的模特是否有錯,例如,需要擁有一個Owner和一個Client模型,它們都擴展了一個通用用戶。

任何幫助,將不勝感激。

謝謝。

+0

如何知道用戶是所有者還是客戶?你將這些信息存儲在用戶表中嗎?不過,我不確定'hasManyThrough'方法在這裏是否合適,畢竟你沒有中間關係。我寧願使用'belongsToMany',如下所示:http://laravel.com/docs/eloquent#many-to-many – Adrenaxus 2014-09-02 12:49:45

回答

1

您的模型可能很好。您正在使用多對多關係,因此指定該關係類型的好地方應該是同一個表 - 數據透視表。

users 
    id 
    name 

sites 
    id 
    url 

site_user 
    site_id 
    user_id 
    type 

其中類型是例如字符串所有者客戶

class User extends Eloquent { 
    public function sites() { 
    return $this->belongsToMany('Site') 
       ->withPivot('type'); 
    } 
} 
class Site extends Eloquent { 
    public function users() { 
    return $this->belongsToMany('User') 
       ->withPivot('type'); 
    } 
    // you can use something like this 
    public function clients(){ 
    return $this->users()->wherePivot('type', 'client'); 
    } 
} 

一旦你有你想要的網站,你就可以得到客戶這樣

$clients = $site->clients()->get(); 

希望這讓你在正確的方向(遠離創造更多的模型,試圖找出繼承,處理與工廠模式等)。有時候解決方案很簡單,根據我的經驗 - 當您開始過度複雜化模型(以這種方式)時,數據庫設計出現問題的可能性很大。

+0

這看起來正是我需要的,一個簡單的問題,我如何在保存時指定類型聯想?謝謝 – SteveEdson 2014-09-02 17:33:04

+0

$ user-> sites() - > attach($ site_id,array('type'=>'client')); – 2014-09-02 18:14:42

+1

之前,該用戶需要保存... – 2014-09-02 18:15:32

相關問題