【问题标题】:Link table in relationship laravel关系laravel中的链接表
【发布时间】:2017-06-24 06:48:44
【问题描述】:

我正在 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->prices 来获取价格等。如何在 Laravel 中使用这种关系?

【问题讨论】:

  • 你能改写一下吗?您想为每个客户的不同产品设置不同的价格吗?
  • 另外,您的Prices 数据透视表的第二列不应该是client_id 而不是price_id

标签: php mysql laravel


【解决方案1】:

如果您的产品和客户之间存在 多对多 关系,并且您需要使用数据透视表上的任何其他列,则需要在关系定义中进行指定。因此,例如在您的 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 中阅读更多相关信息。

【讨论】:

  • 但是我将如何获得特定客户的产品价格?
  • 请先测试一下,然后再将其标记为您的解决方案的答案。
  • 我会更新我的回答,回复您的评论。
  • 对不起我的愚蠢,但是我将如何为客户 y 获得产品 x 的价格?上述解决方案给出了客户或产品的所有价格。我是否必须使用 foreach 循环和 if 语句来检查每种产品的价格?是否有可能 foreach($client->prices as $price) { $price->pivot->price->where('product_id','=',1); }
猜你喜欢
  • 1970-01-01
  • 2023-01-13
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多