У меня есть многоуровневая категория, структура которой выглядит следующим образом:
Parent
- first child
-- second child
- another child
Я хочу, чтобы получал продукты на всех дочерних уровнях в Parent Page
, чтобы я мог иметьвсе продукты parent, first child, second child, another child
внутри Parent
.
То, что у меня есть, В настоящее время я могу получить продукты Parent, first child & another child
, но я не могу получить продукты моего second child
.
Коды
public function totalcategoriessubs($catslug) {
$category = Category::where('slug','=',$catslug)->with('childs')->first();
//testing this
// $products = Product::whereHas('category', function($q) use ($catslug,$category)
// {
// $q->where(function($q) use ($catslug,$category) {
// $q->where('slug',$catslug)->orWhere('category_id',$category->id);
// });
// })->orderBy('created_at', 'DESC')->paginate(10);
$products = Product::whereHas('category', function($q) use ($catslug, $category) {
$q->where(function($q) use ($catslug,$category) {
$q->where('slug',$catslug) //works
->WhereHas('childs') //works
->WhereHas('childs.childs') //not working
->orWhere('category_id',$category->id); //works
});
})->orderBy('created_at', 'DESC')->paginate(10);
//end testing
return view('front.categoriessubs', compact('products', 'category'));
}
модели
Product model
public function category(){
return $this->belongsTo(Category::class);
}
Category model
public function categories()
{
return $this->hasMany(Category::class);
}
public function childs() {
return $this->hasMany(Category::class,'category_id','id') ;
}
public function parent()
{
return $this->belongsTo(Category::class,'category_id');
}
public function isParent()
{
return !$this->category_id ? true : false; // if category_id is null => is a Parent Category
}
public function products(){
return $this->hasMany(Product::class);
}
есть идеи?