使用laravel产品过滤分层类别的产品

时间:2020-03-16 18:52:16

标签: php laravel

这是在laravel 6.x中 我使同一表中的层次结构类别依赖于parent_id,每个类别具有许多子类别,每个类别具有许多产品,当用户单击类别时,对产品进行过滤,这是显示类别及其所有子类别的产品,所有东西都是正确的。 但是子子类别产品的问题是它们没有像类别产品和子类别产品一样进行过滤。问题是什么。? 这是完成这项工作的有力方法吗??

这是类别模型中的关系

    public function subcategory()
    {
     return $this->hasMany(self::class,'parent_id','id');
    }

public function products()
        {
            return $this->hasMany('App\product','category_id','id');
        }

public function parentId()
    { 
        return $this->belongsTo(self::class);
    }

 public function scopeCatItem($query , $id)
        {
            return $query->where('id', $id);
        }

以及此代码在category_products控制器中

     $data = Category::CatItem($request->catid)->withTranslations($locale)
         ->with([ // start with
      'products' => function($query) use ($company , $volt) { // first parameter
              $query->when($company , function($query) use ($company){
                  $query->where('company_id', $company);
                  });
              $query->when($volt , function($query) use ($volt){
                  $query->where('volt', $volt);
                  });
            },
      'subcategory'  => function($query) use ($company, $volt) {  // second parameter          
            $query->whereHas('products', function ($query) use ($company , $volt) {
              $query->when($company , function($query) use ($company){
                    $query->where('products.company_id', $company);
                  });
              $query->when($volt , function($query) use ($volt){
                    $query->where('products.volt', $volt);
                  });
            });         
      },
      'subcategory.products' => function($query) use ($company, $volt) { // third parameter
              $query->when($company , function($query) use ($company){
                    $query->where('products.company_id', $company);
                 });
               $query->when($volt , function($query) use ($volt){
                    $query->where('products.volt', $volt);
                 });                      
         },
    ]) // close with
    ->get();

这是查看产品刀片文件中的代码

  @if(count($item->subcategory))
    @include('panels.frontend.sub-filtered_products',['subcategories' => $item->subcategory])
  @endif

0 个答案:

没有答案