2017-04-16 2 views
0

Ich habe eine Tabelle service, die <PK> id und <FK> plate_number enthält. Dann habe ich eine Tabelle vehicles, die <PK> plate_number und andere nicht wichtige Spalten enthält.Wählen Sie aus 3 Tabellen mit 2 Fremdschlüsseln

Die nächste Tabelle ist eine Bindungstabelle part_fix mit <FK> service_id und <FK> part_id.

Zuletzt ist part mit Spalten <PK> id, name, price.

Ich benutze Laravel Query Builder, aber das ist jetzt nicht so wichtig, nur für den Fall, jemand weiß, wie man es verwendet, wäre eine Lösung in Query Builder für mich besser, aber einfache Postgresql-Abfrage ist in Ordnung.

Ich möchte select aus Tabelle service, wo ich in einer Tabelle angezeigt werden soll <PK> id, <PK> plate_number, und die Bindungstabelle, möchte ich für jede service Teile zuzuordnen. Ich habe den Bindungstisch, weil es viele zu viele Beziehungen gab (eine Reparatur/ein Service kann viele Teile haben, und auch ein Teil kann in vielen Reparaturen im Autoshop verwendet werden).

Ich hoffe, ich erklärte das gut genug, wenn nicht bitte fragen Sie.

Antwort

0

Sie wollen wahrscheinlich etwas wie

Service::with(['vehicle','parts'])->find($serviceid); 

mit den Beziehungen auf der Service-Klasse definiert so etwas wie

public function vehicle() { 
    return $this->belongsTo(Vehicle::class); 
} 

public function parts() { 
    return $this->belongsToMany(Part::class, 'part_fix', 'part_id', 'service_id'); 
} 

Dies sollten Sie tun erlauben zu laden, was Sie nach

echo $service->vehicle->plate_number; 
foreach($service->parts as $part) { 
    echo $part->name 
} 
+0

Nur daran gedacht, möchten Sie vielleicht nicht plate_number als Primärschlüssel verwenden, da, abhängig von der Zuständigkeit, Plattennummern können bei anderen Autos wiederverwendet werden. – Jason

Verwandte Themen