Ich habe diese Plattform, die ich für Foodtruck Ereignisse erstellen. Es gibt einen Pool von Ausstellern, die an mehreren Veranstaltungen teilnehmen. Jeder Foodtruck hat eine eigene Speisekarte mit Gerichten, die in verschiedenen Kategorien serviert werden.Laravel Eloquent Gruppe von mit Pivot-Tabelle & Beziehungen
Das Problem/was ich
ich für jedes Ereignis ein Menü machen möchten erreichen möchten, Looping durch alle Aussteller (die teilnehmen) und dann die Gerichte nach Kategorie zeigt.
So etwas wie das;
/Menü/{eventid}
Dish Kategorie 1
- dish vom Aussteller A
- dish vom Aussteller B
Dish Kategorie 2
- dish von exh A
- Gericht aus exh C
- Gericht aus exh D
...
Models
Ereignismodell
class Event extends Model
{
protected $table = "events";
public function exhibitors()
{
return $this->belongsToMany('App\Exhibitor', 'events_exhibitors');
}
Dish Modell
class Dish extends Model
{
//
protected $table = "dishes";
public function category()
{
return $this->hasOne('App\Category', 'id', 'category_id');
}
public function exhibitor()
{
return $this->belongsTo('App\Exhibitor');
}
}
Aussteller Modell
class Exhibitor extends Model
{
protected $table = "exhibitors";
public function events()
{
return $this->belongsToMany('App\Event', 'events_exhibitors');
}
public function dishes()
{
return $this->hasMany('App\Dish');
}
}
Datenbank-Struktur
Es gibt eine Pivot-Tabelle zu registrieren, welche die Ereignisse zu foodtrucks gehen. Bisher denke ich (hoffe), dass meine Beziehungen funktionieren. Ich hoffe, dieses Bild zeigt genug;
Was ich
habe versucht, ich habe mehrere Dinge ausprobiert, aber ich glaube, meine Einsicht in Laravel eloquent die Logik hinter dieser Frage zu verstehen, fehlt.
$dishes = Event::where('id', $id)
->with(['exhibitors.dishes' => function($q) {
$q->select('dishes.dish_data');
}])->get();
Oder
$dishes = Event::with(array('exhibitor.dish') => function($query) use ($sub){
$query->where('name',$sub);}))->get();
Ich habe absolut keine Ahnung, wie dies durch Eloquent zu erreichen, oder wie wäre dies in der Ansicht arbeiten.
Vielen Dank für Ihre Hilfe. Dies löst einen Builder-Fehler aus "explode() erwartet, dass Parameter 2 als String, Objekt als gegeben" at "$ categories ..." gilt. – essepikker
Ok, die Aussteller-IDs sind eine Laravel-Sammlung, mit -> all() wird jetzt ein Array zurückgegeben. Und die Sekundenabfrage hat die ausstellerids nicht verwendet. – blablabla
Immer noch den gleichen Fehler ... "explode() erwartet, dass Parameter 2 ein String ist, ein Objekt ist gegeben". Wenn ich dd ($ AusstellerIDs), ist es in der Tat ein Array mit der IDs. – essepikker