Laravel 5.6创建多个关系

时间:2018-08-27 09:18:48

标签: php mysql laravel laravel-5

嗨,我有一个复杂的问题。 我和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个价目表相关。

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

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

1 个答案:

答案 0 :(得分: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);