Запросите красноречивую связь с более чем одним столбцом

Играя с красноречивыми отношениями 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 ();

Я могу получить заказ и детали заказа с идентификатором продукта, включенным в детали заказа. Но я хочу иметь возможность получить название продукта, чтобы я мог его отобразить.

Какой запрос я запускаю или лучший способ определить мои отношения?

1

Решение

использование вложенная нетерпеливая загрузка:

$this->order->with('orderDetails', 'orderDetails.product')->get();

Отношение должно быть belongsTo(), но нет hasMany():

public function product()
{
return $this->belongsTo('App\Product', 'product_id', 'id');
}

Кроме того, вы можете использовать здесь отношения многие ко многим. Но только если это подходит.

3

Другие решения

Просто для всех, кто посещает этот вопрос в качестве ссылки, как вы просили предложить отношения, вот способ, которым я мог бы достичь этого и мое мнение.

на самом деле его продукция принадлежит многим заказам, а заказы принадлежат многим продуктам. Я вижу, что детали заказа — это стержень. Вы можете создать модель для этого тоже, если хотите.

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');
}
2

По вопросам рекламы [email protected]