2017-01-04 7 views
1

Игра с красноречивыми отношениями laravel. У меня эти отношения.Запрос красноречивых отношений с более чем одной колонкой

Заказ:

id 
id_customer 

Order.php

public function orderDetails(){ 
    return $this->hasMany('App\OrderDetail', 'order_id'); 
} 

OrderDetail

id 
order_id 
product_id 
quantity 

OrderDetail Модель

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') -> получить();

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

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

+0

нет названия, я не вижу столбец имя ?? !! – aimme

+0

продукт имеет название столбца –

+1

Просто отредактировал его, чтобы показать правильно. –

ответ

3

nested eager loading Использование:

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

связь должна быть belongsTo(), но не hasMany():

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

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

+0

Я пробовал это, и orderDetails появляется как пустой массив. –

+1

Вы изменили отношение? Выполняет ли '$ this-> order-> ('orderDetails', 'orderDetails.product') -> get();' работает для вас? –

+0

'$ this-> order-> с ('orderDetails') -> get();' фактически дает мне информацию, которая включает идентификатор продукта. Но я не знаю, как получить имя продукта –

2

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

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

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