laravel选择父级的所有行

时间:2017-08-19 07:02:01

标签: laravel eloquent parent-child

我有这样的表结构:

enter image description here

以及更多描述我还显示了类别表: enter image description here

这是我的控制者:

    public function kategori($id, $slug)
{
    $produks=Product::where('category_id', $id)->paginate(12);;

    return view('guest.daftarproduk')
          ->with('produks',$produks);

}

我可以从子类别中选择所有产品(id 43,44,45)。

但我不知道如何从父类别(例如id 42)中选择所有产品,同时也从其中获取所有产品(id 43,44,45)

请帮帮我。

- 编辑---:

模特:

public function childs() {
        return $this->hasMany('App\Category','parent_id','id') ;
}

控制器:

public function allkategori($id, $slug) {
    $category= Category::with('childs')->FindorFail($id);
    $child = $category->childs->pluck('id');

    $produks=Product::whereHas('featuredPhoto', function($query) { 
        $query->orderBy('photo', 'asc'); 
    })->where('category_id', $id)->get();

    return view('guest.daftarproduk')
          ->with('produks',$produks);
}

2 个答案:

答案 0 :(得分:0)

尝试此操作,使用eloquent获取属于父类别的所有子类别,然后遍历返回集合中的每个子类别以获取产品。

答案 1 :(得分:0)

最后,我找到了Has Many Through关系的答案。

型号:

public function allProducts()
    {
        return $this->hasManyThrough('App\Product', 'App\Category', 'parent_id', 'category_id', 'id');
    }

控制器:

public function allkategori($id, $slug) {
    $category= Category::with('allProducts')->FindorFail($id);
    $child = $category->allProducts()->paginate(12);

    return view('guest.daftarproduk')
          ->with('produks',$child);
}