Laravel 5.6创建多种关系

问题描述 投票:3回答:1

嗨,我有一个复杂的问题。我和Laravel一起工作了一个星期。我尝试为客户建立价目表。

我有5张桌子:

price_lists:
  id
  title

---------------------------
price_lists_products:
  id
  product_id
  price_lists_id
  price
  percent

---------------------------
price_lists_users:
  id
  user_id
  price_lists_id

---------------------------
products:
  id
  title
  price
---------------------------
users:
  id
  name

我必须像这样把它们放在一起:

有几个价格表

每个价目表都与产品+价格相关联

每个用户最多可以关联5个价目表

在产品视图和列表中,我需要向用户显示价格列表中为他设置的最便宜价格的产品

例如:

我有一本书属于5个不同的价格表和每个价格表,价格不同。

并且有一个用户与3个价格表相关联。

我希望用户在他所属的价格表中获得最便宜的价格

我希望这是可以理解的,我不知道如何处理它,如果你可以帮助我,我会很高兴,谢谢!

php mysql laravel laravel-5
1个回答
0
投票

ProductPriceListUser创建模型。

在你的Product模型中,创建一个多对多关系以获得相关的PriceList集合:

public function pricelists()
    {
        return $this->belongsToMany('App\PriceList')->withPivot('price', 'percent');
    }

在你的PriceList模型中,创建一个多对多关系以获得相关的User集合:

public function users()
    {
        return $this->belongsToMany('App\User');
    }

再次在Product模型中,您可以获得最便宜的价格:

// get the cheapest listing by user_id, you can set default to logged in user
public function cheapestprice($user_id){
    $this->pricelists->whereHas('users', function ($query) {
        $query->where('user_id', $user_id);
    })->orderBy('price_lists_products.price','ASC')->first()->price;
}

最后,使用Product对象,您可以获得最便宜的价格:

Product::first()->cheapestprice(Auth::user()->id);
© www.soinside.com 2019 - 2024. All rights reserved.