2015-01-20 92 views
1

我在Laravel制作了一个会计系统,其中有产品和客户。 我想为每个客户设定每种产品的单独价格,即没有为每个折扣设定百分比。为此我为价格制作了一张单独的表格。关系链接表laravel

我的表架构是

Products(id,name,category,stock) 
Clients(id,name,email,city) 
Prices(product_id,price_id,price(String)) 

但我无法设置Laravel关系。 我做的产品表中的价格功能

public function prices() 
{ 
    return $this->belongsToMany('Client','prices','product_id','client_id'); 
} 

,以及在客户表作为

public function prices() 
{ 
    return $this->belongsToMany('Product','prices','client_id','product_id'); 
} 

,但我无法用产品 - $>价格得到的价格等,我如何使用这种关系在Laravel?

+1

你能改说一下吗?您是否想为客户的每种产品设定不同的价格? – davidxd33 2015-01-20 20:15:28

+0

此外,您的'价格'数据透视表的第二列不应该是'client_id'而不是'price_id'吗? – Bogdan 2015-01-20 20:25:34

回答

0

如果您有多对多您的产品和客户之间的关系,并且您需要使用数据透视表上的任何其他列,则需要使用关系定义来指定它。因此,例如在你Product模型,你可能有这样的:

public function prices() 
{ 
    return $this->belongsToMany('Client', 'Prices', 'product_id', 'client_id')->withPivot('price'); 
} 

withPivot方法告诉Laravel您需要的price列是牵强,除了关系ID列。要获得价格的产品,那么你可以做到以下几点:

foreach($product->prices as $price) 
{ 
    $price->pivot->price; // to get the price for each individual client 
} 

要为Client模型做到这一点,你会需要以下(再次specifing的price列关系的一部分):

public function prices() 
{ 
    return $this->belongsToMany('Product', 'Prices','client_id','product_id')->withPivot('price'); 
} 

而获得的价格为客户:

foreach($client->prices as $price) 
{ 
    $price->pivot->price; // to get the price for each individual product 
} 

您可以在Laravel Docs阅读更多关于这一点。

+0

谢谢,我希望它能工作。 – 2015-01-20 20:42:38

+0

但是,我将如何获得特定客户的产品价格? – 2015-01-20 20:44:01

+0

请在将此标记为解决方案的答案之前对其进行测试。 – Bogdan 2015-01-20 20:44:24