2016-09-22 19 views
0

Ich brauche wirklich Hilfe mit diesen großen Fragen, die ich habe. Ich habe Baumtabelle:Laravel, Drei-Tabellen-Beziehung auf Eloquent

Unternehmen:

id | owner_id | name | address 
------------------------------------- 
1 | 5  | Google | 25 St RD 
2 | 5  | Yahoo | 36 Ave St 
3 | 11  |Microsoft| 1 Ave St 
4 | 5  | Amazon | 25 St NE 

Benutzer:

id | name | email | type 
------------------------------------- 
3 | Daniel | [email protected] | customers 
4 | Dave | [email protected] | user 
5 | Nancy | [email protected] | admin 
6 | Robert | [email protected] | user 

user_companies

id | user_id |parent_id| company_id 
------------------------------------- 
1 | 3  | 5  |  2 
2 | 3  | 5  |  2 
3 | 11  | 5  |  3 
4 | 3  | 6  |  1 

Ausgabe ein: Ich brauche alle Benutzer zurückzugeben, die gewesen sein mit Firma_i verbunden d 2 Dies ist der Code, den ich habe, aber er liefert keine korrekten Daten.

$CompanyList = DB::table('users') 
      ->leftJoin('user_companies', 'users.id', '=', 'user_companies.parent_id') 
      ->join('companies', 'users.id', '=', 'companies.user_id')->where('company_id', '=', 5) 
      ->get(['users.name', 'users.email', 'user_companies.user_id']); 

Hinweis: parent_id ist die ID von der das Unternehmen Datensatz erstellt. Ich benutze es woanders.

Ausgabe zwei: Ich habe die user_id 5 und ich brauche alle Unternehmen mit User_id zugeordnet zurückzukehren 5. Ich war mit dem gleichen Code zu versuchen, war aber nicht erfolgreich.

Jede Hilfe wird geschätzt.

+0

Wenn ich korrigieren kann/verbessern Sie Ihre Abfrage, brauchen Sie nicht die für die Unternehmen, da Sie beitreten Filtern nach seiner ID (und Sie drucken keine Firmeninformationen), die Sie bereits in der Tabelle 'user_companies' haben. –

+0

Was ist owner_id in Unternehmen Tabelle können Sie mir erklären? –

+0

owner_id ist die ID der Person, die den Unternehmensdatensatz erstellt hat. Ich benutze es woanders. –

Antwort

0

Zunächst einmal verwenden Sie nicht die Eloquent Relations von Laravel, das ist nur Old School MySQL Relations.

Zweitens verstehe ich nicht Ihre Parent_id in den user_companies. Wenn ein Unternehmen ein Elternteil hat, wird es in der Unternehmenstabelle als Spalte gesetzt, die nicht in der Beziehungstabelle enthalten ist.

Und Ihre Beziehung Tabelle "user_companies" hat keine eindeutigen Schlüssel, so dass Sie die ersten beiden Ergebnisse mit dem gleichen Ergebnis haben.

Stellen Sie sicher, dass die Normalisierung OK ist, bevor Sie de Datenbank-Tabellen erstellen, dann die zum Beispiel lesen Sie die doc von Laravel: https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

+0

Danke für Ihre Antwort. Ich weiß, dass das nicht der Eloquent Relations Code ist. Ich habe gefragt, was ich tun soll. Diese Dokumentation hat nicht viel geholfen. Ist es möglich, mich wissen zu lassen, was Ihre Lösung ist? –