Laravel Eloquent hat viele und gehört zu vielen, die nicht mit zurückkehren
Frage
Ich versuche eine einzelne Abfrage durchzuführen, um eine zurückzubekommen order
und die card
aufladen, aber es wird eine Fehlermeldung angezeigt.
Kartenmodell:
class Card extends Eloquent {
protected $guarded = array();
public static $rules = array();
public function user()
{
return $this->belongsTo('User');
}
public function orders()
{
return $this->hasMany('Order');
}
}
Bestellmodell:
class Order extends Eloquent {
protected $guarded = array();
public static $rules = array();
public function user()
{
return $this->belongsTo('User');
}
public function card()
{
return $this->hasOne('Card');
}
public function address()
{
return $this->belongsTo('Address');
}
public function orderItems()
{
return $this->hasMany('OrderItem');
}
}
Was ich versuche zurückzubekommen:
$order = Order::with('card')->find($id);
Das funktioniert offensichtlich nicht und ich habe mehrere Combos ausprobiert.Ich denke, das Problem liegt bei meinen Modellen / Beziehungen.
Irgendeine Idee, wie ich die Bestellung mit den Karten- / Token-Details zurückbekommen kann?
DB Infos:Jede Bestellung kann nur eine haben card_id
und jede Karte kann in vielen Bestellungen sein.Es gibt keine order_id
in der Karte.
Bestelltabelle grundsätzlich:
id | card_id
Kartentisch:
id | token
Versuchen, das zu bekommen token
col, um mit dem zurückzukehren Order
.
Lösung
In Ihrem Order
modell, sie müssen dies ändern:
public function card()
{
return $this->hasOne('Card');
}
zu diesem:
public function card()
{
return $this->belongsTo('Card');
}
Der Grund ist, dass Sie die Umkehrung der definieren hasMany
Beziehung.Mit dem belongsTo
beziehung, Eloquent wird nach einem suchen card_id
spalte auf der orders
Tabelle.