从子类别中检索所有产品

时间:2017-11-27 10:01:55

标签: laravel eloquent

这是我的产品表:

  • ID
  • 名称
  • CATEGORY_ID

这是我的类别表:

  • ID
  • 标题
  • PARENT_ID

我想获取属于指定类别及其子级的所有产品(按类别ID)。

Products表中的

category_id始终引用子类别

我尝试了 HasManyThrough ,但我无法对检索到的产品进行分页。

4 个答案:

答案 0 :(得分:0)

首先获取所有类别并循环遍历并获取属于该类别的所有产品,并且您可以限制每个类别的产品数量,假设为10.

之后,如果用于前端,则使用ajax,并且对于API直接传递偏移量,为特定类别赋予特定量的偏移量。

希望这有帮助。

答案 1 :(得分:0)

这适用于一个级别的子类别:

Product::whereHas('category', function($q) use($categoryId) {
    $q->where('category', $categoryId)
      ->orWhere('parent_id', $categoryId);
})
->get();

categorybelongsTo关系。

答案 2 :(得分:0)

//In Products Controller

   $products= DB::table('products')->select('products.*')
   ->join('categories', 'categories.id' ,'=', 'products.category_id')
   ->get();

//or
//here is using model name also
use App\Products;

   $products= Products::select('products.*')
   ->join('categories', 'categories.id' ,'=', 'products.category_id')
   ->get();

答案 3 :(得分:0)

首先在Category模型中编写以下方法:

public function children(){
    return $this->hasMany(Category::class, 'parent_id');
}

public function parent(){
    return $this->belongsTo(Category::class, 'parent_id');
}

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

并在Product模型:

public function category(){
    return $this->belongsTo(Category::class, 'category_id');
}

现在在控制器中:

$res = Category::with([
         'products',
         'children.products'
       ])->find($your_category_id);

使用dd($res)并查看结果。希望它有效