Laravel交叉检查查询

时间:2018-02-25 16:00:10

标签: php laravel

我想展示我的品牌页面,如:url/discount/{brand-slug}到目前为止我可以通过以下方式完成:

$brandspromotion = Brand::where('slug', $slug)->OfStatus('Active')->firstOrFail();
当我尝试仅在{3}名为brand_id的第3个表中保存id discounts的产品时,会出现

问题。

  

用简单的话说:我想只获取每个品牌的打折产品

LOGIC

  1. 折扣表保存product_id
  2. 产品表保存brand_id
  3. 品牌必须从idproducts表格找到自己的discounts
  4. 代码

    到目前为止,我有这段代码,但是无效。)

    public function brandspromotions($slug) {
        $promotions = Discount::Valid()->get();
        $grouped = $promotions->map(function ($item, $key) {
          return $item->products->brand_id;
        });
        $brandspromotion = Brand::where('slug', $slug)->OfStatus('Active')
          ->where('id', $grouped)->get();
        return view('front.brandspromotions', compact('brands', 'brandspromotion'));
      }
    

    更新

    product model

    public function discount(){
        return $this->belongsTo(Discount::class, 'product_id', 'id');
      }
    public function brand(){
         return $this->belongsTo(Brand::class);
      }
    

    brand model

    public function products(){
         return $this->hasMany(Product::class);
      }
    

    discount model

    public function products(){
         return $this->belongsTo(Product::class, 'product_id', 'id');
     }
    

1 个答案:

答案 0 :(得分:2)

如果你有一个品牌slu and并且你想只获得该品牌的产品,这些产品在discounts表中有记录:

Product::has('discount')
    ->whereHas('brand', function($q) use($slug) {
        $q->where('slug', $slug);
    })
    ->get();

discountbrandProduct模型中定义的关系。