2017-03-31 11 views
0

Ich habe zwei Tabellen:Laravel Viele-zu-Eins-Beziehung

orders 
-id 
-status_id 

status 
-id 
-label 

Beziehungen sind:

Jeder Auftrag hat einen Status

public function status() 
{ 
    return $this->hasOne('App\Status'); 
} 

Jeder Status viele Aufträge gehören, können

public function orders() 
{ 
    return $this->belongsToMany('App\Order'); 
} 

Ich nehme an, es ist c orrect?

Nun, wenn ich benutze:

$o = Status::with('orders')->get(); 

ich alle Aufträge. Wenn ich benutze:

$o = Order::with('status')->get(); 

ich einen Fehler! Spalte nicht gefunden: 1054 Unbekannte Spalte 'status.order_id' in 'where-Klausel' (SQL: wählen * aus status wo status. order_id in (1, 2, 3, 4, 5)) Aber ich habe keinen Status .order_id, stattdessen habe ich order.status_id.

Wie bekomme ich das Etikett des Bestellstatus? Wie order-> status-> label?

Antwort

2

Sie müssen hasMany für eine Eins-zu-viele-Beziehung verwenden. Ihre Aufträge Funktion sollte wie folgt sein:

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

Die Funktion für statusbelongsTo sein sollte.

public function status() 
{ 
    return $this->belongsTo('App\Status'); 
} 

belongsToMany ist für viele-zu-viele-Beziehung mit einem Drehtisch verwendet.

+0

Aber würde es dann in menschliche Sprache übersetzen wie "Ordnung gehört zum Status. Status hat viele Befehle"? Das ist ein wenig kontraintuitiv, aber es funktioniert einfach großartig! – TheKitMurkit