关系laravel中的链接表

时间:2015-01-20 20:13:20

标签: php mysql 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');
}

但是我无法使用$ product->价格来获得价格等。我怎样才能在Laravel中使用这种关系?

1 个答案:

答案 0 :(得分:0)

如果您的产品与客户之间存在多对多关系,并且您需要使用数据透视表上的任何其他列,则需要使用关系定义指定该关系。例如,在您的Product模型中,您可能会这样:

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

withPivot方法告诉Laravel除了关系ID列之外,还需要提取price列。要获得产品的价格,您可以执行以下操作:

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

要对Client模型执行此操作,您需要以下内容(再次指定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

中详细了解相关信息