2015-04-20 51 views
6

是否有可能在兩列上有hasMany關係?Laravel 5在兩列上有很多關係

我的表格有兩列,分別是user_idrelated_user_id

我想要我的關係匹配任一列。

在我的模型我有

public function userRelations() 
{ 
    return $this->hasMany('App\UserRelation'); 
} 

它運行查詢:select * from user_relations where user_relations.user_id in ('17', '18')

我需要運行的查詢是:

select * from user_relations where user_relations.user_id = 17 OR user_relations.related_user_id = 17 

編輯:

我使用預先加載,我認爲這會影響它怎麼會有工作。

$cause = Cause::with('donations.user.userRelations')->where('active', '=', 1)->first(); 
+0

也許最好過濾這兩列的UserRelation模型? –

回答

14

我不認爲有可能完全按照你的要求去做。

我認爲你應該將它們視爲單獨的關係,然後在模型上創建一個新方法來檢索兩者的集合。

public function userRelations() { 
    return $this->hasMany('App\UserRelation'); 
} 

public function relatedUserRelations() { 
    return $this->hasMany('App\UserRelation', 'related_user_id'); 
} 

public function allUserRelations() { 
    return $this->userRelations->merge($this->relatedUserRelations); 
} 

這樣,您仍然可以在模型上獲得熱切加載和關係緩存的好處。

$cause = Cause::with('donations.user.userRelations', 
     'donations.user.relatedUserRelations') 
    ->where('active', 1)->first(); 

$userRelations = $cause->donations[0]->user->allUserRelations(); 
+0

謝謝,這看起來是一個很好的做法。 – CharliePrynn

+3

爲什麼我得到這個?調用未定義的方法Illuminate \\ Database \\ Query \\ Builder :: merge() – ciccioassenza