Link table 关系 laravel

Link table in relationship laravel

我正在 Laravel 中制作一个会计系统,其中我有产品和客户。 我想为每个客户设置每个产品的单独价格,即不为每个折扣设置百分比。为此,我为价格做了一个单独的table。

我的 table 架构是

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

但我无法设置 Laravel 关系。 我在产品 table 中将价格函数设置为

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

并在客户端 table 中作为

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

但我无法使用 $product->prices 获取价格等。如何在 Laravel 中使用这种关系?

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