Nicht sicher, Sie würden sogar eine hasManyThrough
Beziehung hier benötigen, es sei denn, Sie alle InvoiceDatail
Objekte gehören, für alle Elemente abrufen möchten, die zu der Kategorie wiederum gehören. Dieser Teil ist nicht klar aus Ihrer Frage.
Aber in Ihrem Beispiel holen Sie Artikel mit ihrer Kategorie aus distinct item_id.
Der Grund, warum dies nicht funktioniert, ist, weil Sie versuchen, die Kategorie Relation aus dem InvoiceDetail
Objekt abzurufen, die nicht vorhanden ist.
->with('item', 'category')
Sie wollen auf den Punkt Beziehung der Category
basiert laden, nicht auf der Grundlage der InvoiceDetail
, versuchen Sie die Punktnotation (vorausgesetzt, dass Sie die anderen Beziehungen definieren tat)
->with('item.category')
Beziehungen sein sollte wie dies:
class InvoiceDetail extends Model
{
public function item()
{
return $this->belongsTo(\App\Item::class);
}
}
class Item extends Model
{
public function invoiceDetails()
{
return $this->hasMany(\App\InvoiceDetail::class);
}
public function category()
{
return $this->belongsTo(\App\Category::class);
}
}
class Category extends Model
{
public function items()
{
return $this->hasMany(\App\Item::class);
}
public function invoiceDetails()
{
return $this->hasManyThrough(\App\InvoiceDetail::class, \App\Item::class, 'category_id', 'item_id');
}
}
Sie würden die hasManyThrough
verwenden möchten, wenn Sie zum Beispiel eine Kategorie und Sie wollen alle InvoiceDetails laden direkt.
dd($category->invoiceDetails);
versuchen Sie, 'id', 'id' schließlich wie in [doc] erwähnt (https://laravel.com/docs/5.5/eloquent-relationships#has-many-through). Und ja Diese Methode sollte im InvoiceDetail-Modell geschrieben werden. Nicht in der Kategorie Modell – rahulsm