laravel5.6创建多个关系

cyej8jka  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(339)

嗨,我有个复杂的问题。我和拉威尔一起工作才一个星期。我试着为顾客建立价目表。
我有5张table:

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个价目表关联。
我希望用户在他所属的价目表中得到最便宜的价格
我希望这是可以理解的,我不知道如何处理它,我会很高兴,如果你能帮助我,谢谢!

8yparm6h

8yparm6h1#

为创建模型 Product , PriceList 以及 User .
在你的 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::first()->cheapestprice(Auth::user()->id);

相关问题