Невозможно получить данные о товарах категории и подкатегории в Laravel, используя связь - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть три таблицы, которые я использую для получения категорий и связанных с ними продуктов,

Категории:

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');

Пожалуйста, помогите разобраться с моим выпуск.

...