У меня есть три таблицы, которые я использую для получения категорий и связанных с ними продуктов,
Категории:
id | name | slug | parent_id
Продукты:
id | name | slug | price
Product_categories:
id | category_id | product_id
У меня сгенерированы следующие пункты меню
Mens
| Topwear
| Jackets
| Shirts
| T-Shirts
Womens
| Topwear
| Kurtis
| T-Shirts
Я использую следующий URL:
http://localhost:8000/top-wear
для отображения товаров категории верхнего уровня, но если я добавлю подкатегорию с категорией верхнего уровня
http://localhost:8000/top-wear/Jackets
т.е. куртки здесь, то я должен получить только куртку, но сейчас я получаю все продукты в этой категории, то есть куртки, рубашки, футболки.
Код контроллера:
public function show($categorySlug, $subcategorySlug=null)
{
$child_categories=$this->categoryRepository->getchild_catproducts($categorySlug);
return view('site.pages.category', compact('child_categories'));
}
Модель:
public function getchild_catproducts($categorySlug)
{
$productsLists= Category::with(['products', 'children', 'children.products'])->where('slug',$categorySlug)->get();
return $productsLists;
}
Вид:
@foreach($child_categories[0]->children as $cat_prod)
@foreach($cat_prod->products as $product)
<div class="col-6 col-md-4">
<div class="card list-item bg-white rounded overflow-hidden position-relative shadow-sm">
<span class="like-icon"><a class="active" href="#"> <i class="icofont icofont-heart"></i></a></span>
<a href="#">
<span class="badge badge-success">50% OFF</span>
@php ($product_img=$product->images['0']['full'])
<img src="{{ asset('storage/'.$product_img) }}" class="card-img-top" alt="..."></a>
<div class="card-body">
<h6 class="card-title mb-1"><a href="{{ route('product.show', $product->slug) }}">{{ $product->name }}</a></h6>
<div class="stars-rating"><i class="icofont icofont-star active"></i><i class="icofont icofont-star active"></i><i class="icofont icofont-star active"></i><i class="icofont icofont-star active"></i><i class="icofont icofont-star"></i> <span>613</span></div>
<p class="mb-0 text-dark">{{ $product->sale_price }} <span class="text-black-50"><del>{{ $product->price }} </del></span></p>
</div>
</div>
</div>
@endforeach
@endforeach
Категория Модель:
public function children()
{
return $this->hasMany(Category::class, 'parent_id');
}
public function products()
{
return $this->belongsToMany(Product::class, 'product_categories', 'category_id', 'product_id');
}
Маршруты:
Route::get('/{categorySlug}/{subcategorySlug?}', 'Site\CategoryController@show')->name('category.show');
Пожалуйста, помогите разобраться с моим выпуск.