2017-02-21 7 views
-1

Ich arbeite an einem CRM, wo ich ein Benutzermodell habe, die viele zu viele Beziehungen mit anderen Benutzern und eine Art von Beziehung haben kann, die durch die Pivot-Tabelle definiert ist.Laravel 5.3 Viele zu viele Beziehung mit demselben Modell

Zum Beispiel:

Tim -> Tom (Mitarbeiter)

Tim -> Steve (Familienmitglied)

Tim -> Jon (Nachbarn)

In meinem Benutzer Modell Ich habe das, wo ich user1_id und user2_id aus der Pivot-Tabelle als Fremdschlüssel verwende:

public function relationships() 
{ 
    return $this->belongsToMany(User::class,null,'user1_id','user2_id')->withTimestamps()->withPivot('type'); 
} 

Was in einer Richtung funktioniert. Also, wenn ich das anrufe:

Das funktioniert wie erwartet und ich werde Tom Steve und Jon als Ergebnisse bekommen. Wenn ich nun Toms ID in dieser Abfrage verwenden würde, wird Tim nicht als eine Beziehung zurückkommen, da es nach user1_id sucht, wenn Toms ID in user2 gespeichert ist.

Gibt es eine Lösung, die Datensätze zu ziehen, wenn es eine Übereinstimmung von einem Fremdschlüssel gibt? Ich möchte nicht 2 Datensätze für jede Beziehung speichern müssen.

+0

Was ist Ihre Pivot-Tabelle? Du scheinst "null" zu übergeben. – EddyTheDove

+0

Es ist user_user. Ich übergebe null, da ich die Laravel-Benennungskonvention befolgt habe und standardmäßig auf Null gesetzt ist. – tecshaun

Antwort

1

Ich werde davon ausgehen, dass ich irgendwie verstanden habe, was Sie tun möchten. Beziehungen in Laravel funktionieren in beide Richtungen. In Ihrem Fall haben Sie nur EINE Richtung definiert, möchten diese jedoch in beide Richtungen verwenden. So löschen Sie, was ich meine

public function peopleIKnow() { 
    return $this->belongsToMany(User::class,null,'user1_id','user2_id')->withTimestamps()->withPivot('type'); 
} 

public function peopleWhoKnowMe() { 
    return $this->belongsToMany(User::class,null,'user2_id','user1_id')->withTimestamps()->withPivot('type'); 
} 

Auf diese Weise können zwei Wege-Beziehung haben. Sie können auf dieser Idee aufbauen, um zu bekommen, was Sie wollen.

+0

Danke Ich verstehe, aber in diesem Fall muss ich jetzt 2 Anrufe machen, die 2 Abfragen für eine Reihe von Ergebnissen tun. Selbst wenn ich das tun würde, wie würde ich die 2 Ergebnisse in eine Sammlung zusammenführen? – tecshaun

+0

Danke, dass Sie mich abmelden, obwohl ich der Einzige bin, der versucht, Ihnen zu helfen. Wie auch immer, für das, was Sie zu tun versuchen, müssen Sie Eloquent aufgeben und es mit einer eigenen Abfrage bekommen, wo Sie entweder "user1_id" oder "user2_id" überprüfen. – EddyTheDove

+0

Ich habe Sie nicht abgelehnt, und wenn ich es tat, war es überhaupt nicht beabsichtigt. Ich habe dich gerade aufgezogen. – tecshaun

Verwandte Themen