2015-04-20 5 views
6

Ist es möglich, eine hasMany Beziehung auf zwei Spalten haben?Laravel 5 hasMany Beziehung auf zwei Spalten

Meine Tabelle hat zwei Spalten, user_id und related_user_id.

Ich möchte meine Beziehung zu einer der Spalten übereinstimmen.

In meinem Modell habe ich

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

, die die Abfrage ausgeführt wird: select * from user_relations where user_relations.user_id in ('17', '18').

Die Abfrage, die ich laufen müssen, ist:

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

EDIT:

Ich verwende eifrig Laden und ich denke, das beeinflusst, wie es muss funktionieren.

+0

Vielleicht ist es besser, nur das 'UserRelation' Modell durch diese beiden Spalten zu filtern? –

Antwort

14

Ich glaube nicht, dass es möglich ist, genau das zu tun, was Sie fragen.

Ich denke, Sie sollten sie als separate Beziehungen behandeln und dann eine neue Methode für das Modell erstellen, um eine Sammlung von beiden abzurufen.

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); 
} 

diese Weise können Sie immer noch den Vorteil der eifrigen Laden und Beziehung Caching auf dem Modell bekommen.

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

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

Danke, das sieht nach einem guten Weg aus. – CharliePrynn

+3

Warum bekomme ich das? Aufruf zu undefinierter Methode Illuminate \\ Database \\ Query \\ Builder :: merge() – ciccioassenza