У меня есть эта платформа, которую я создаю для событий, связанных с пищей. Существует множество экспонентов, которые посещают несколько мероприятий. У каждого пищевого напитка есть свое меню блюд, которые они обслуживают, в нескольких категориях.Laravel Eloquent group by with pivot table & relations
Проблема/что я хотел бы достичь
Я хотел бы сделать меню для каждого события, пробегает по всем участникам (которые присутствуют), а затем с указанием блюд по категориям.
Нечто подобное;
/меню/{EventID}
блюда категория 1
- блюдо из Экспонента
- блюда из экспонента B
блюда категория 2
- блюда от exh A
- блюдо из EXH C
- блюдо из EXH D
...
Модели
модель Event
class Event extends Model
{
protected $table = "events";
public function exhibitors()
{
return $this->belongsToMany('App\Exhibitor', 'events_exhibitors');
}
Dish модель
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');
}
}
Экспонент модель
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');
}
}
Структура базы данных
Существует поворотный стол для регистрации, который foodtrucks перейти на какие события. До сих пор, я думаю (надеюсь) мои отношения работают. Надеюсь, что этот образ проявит достаточно;
То, что я пытался
Я попробовал несколько вещей, но я думаю, что мое понимание в Laravel красноречивого не хватает, чтобы понять логику этого вопроса.
$dishes = Event::where('id', $id)
->with(['exhibitors.dishes' => function($q) {
$q->select('dishes.dish_data');
}])->get();
Или
$dishes = Event::with(array('exhibitor.dish') => function($query) use ($sub){
$query->where('name',$sub);}))->get();
У меня нет абсолютно никакого понятия, как это сделать с помощью красноречивых или как это будет работать в представлении.
Спасибо за вашу помощь. Это порождает ошибку строителя «explode() ожидает, что параметр 2 будет строкой, объект задан« at »$ categories ...» – essepikker
Ok экспонентов, где коллекция Laravel, с -> all() теперь возвращает массив. И запрос секунд не использовал экспонентов – blablabla
Все еще бросает ту же ошибку ... "explode() ожидает, что параметр 2 будет строкой, объект указан". Когда я dd ($ exhibitorIds), это действительно массив, содержащий идентификаторы. – essepikker