Играя с красноречивыми отношениями Laravel.
У меня есть эти отношения.
Порядок:
id
id_customer
Order.php
public function orderDetails(){
return $this->hasMany('App\OrderDetail', 'order_id');
}
OrderDetail
id
order_id
product_id
quantity
Модель заказа детали
public function product()
{
return $this->hasMany('App\Product', 'id', 'id');
}
public function order(){
return $this->belongsTo('App\Order', 'order_id', 'id');
}
Товар
id
name
price
Когда dd’ed
дд ($ this-> заказ запасной> с ( ‘ORDERDETAILS’) -> Get ();
Я могу получить заказ и детали заказа с идентификатором продукта, включенным в детали заказа. Но я хочу иметь возможность получить название продукта, чтобы я мог его отобразить.
Какой запрос я запускаю или лучший способ определить мои отношения?
использование вложенная нетерпеливая загрузка:
$this->order->with('orderDetails', 'orderDetails.product')->get();
Отношение должно быть belongsTo()
, но нет hasMany()
:
public function product()
{
return $this->belongsTo('App\Product', 'product_id', 'id');
}
Кроме того, вы можете использовать здесь отношения многие ко многим. Но только если это подходит.
Просто для всех, кто посещает этот вопрос в качестве ссылки, как вы просили предложить отношения, вот способ, которым я мог бы достичь этого и мое мнение.
на самом деле его продукция принадлежит многим заказам, а заказы принадлежат многим продуктам. Я вижу, что детали заказа — это стержень. Вы можете создать модель для этого тоже, если хотите.
products
Таблица
id
customer_id
product.php
public function orders()
{
return $this->belongsToMany(Order::class, 'order_details', 'order_id', 'product_id')->withPivot('quantity');
}
orders
Таблица
id
name
price
Order.php
public function products()
{
return $this->belongsToMany(Product::class, 'order_details', 'product_id', 'order_id')->withPivot('quantity');
}
я не могу создать OrderDetail
поскольку нет твердой ссылки на таблицу.
Просто order_details
Таблица
id
order_id
product_id
quantity
но если бы я создал модель OrderDetail, вот как это было бы
public function products()
{
return $this->hasMany(Product::class, 'product_id');
}
public function orders()
{
return $this->hasMany(Order::class, 'order_id');
}