Как получить данные из трех моделей, связанных друг с другом в Laravel 5.8

#laravel #eloquent

Вопрос:

Итак, у меня есть этот модельный заказ, который имеет отношение один ко многим с моделью ProductOrder. А также модель продукта, которая имеет одинаковое отношение ко многим отношениям с моделью производителя. Я могу получить данные PorductOrder с продуктом или заказом. Подобный этому:

 Order::with('product_orders')->get();
 

Теперь это возвращает мои заказы с соответствующими данными производителя. Как я могу включить данные о продуктах каждого производителя в эту коллекцию?

Комментарии:

1. похоже, что это много ко многим отношениям между продуктами и заказами. Проверьте этот ресурс. laravel.com/docs/8.x/eloquent-relationships#many-to-many

Ответ №1:

Внесите изменения в название функции, название поля, название модели в соответствии с вашими требованиями

Шаг 1:

В вашей модели производителя используйте эту функцию:

 public function products()
{
    return $this->hasOne('AppProduct',  'id', 'product_id');
}
 

Шаг 2:

После этого в вашем запросе вы можете использовать как:

 Order::with('product_orders.products')->get();
 

Комментарии:

1. Это именно то, чего я хотел. Шаг 1 уже был сделан. Я просто хотел знать, как это написать, как в вашем шаге 2. Не был совсем уверен, что для этого искать. Большое спасибо.

Ответ №2:

Похоже ProductOrder , это просто объединяющая таблица/модель, верно? Если это так, вам следует перейти на множество различных отношений с моделью продуктов, чтобы

 public function orders()
{
  return $this->belongsToMany('AppOrders', 'product_order');
}
 

и приказы, чтобы

 public function products()
{
  return $this->belongsToMany('AppProducts', 'product_order');
}
 

Затем вы можете получить доступ к таким

Order::find(1)->products()->get();

Комментарии:

1. Да, я бы использовал этот способ, но ProductOrder-это не просто соединительная таблица в моем случае. У него есть некоторые другие свойства, такие как цена продукта, количество для этого конкретного заказа