#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-это не просто соединительная таблица в моем случае. У него есть некоторые другие свойства, такие как цена продукта, количество для этого конкретного заказа