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

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

Моя структура таблицы выглядит следующим образом:

Продукт:

enter image description here

Категория:

enter image description here

Product_categories:

enter image description here

Я создал функцию для этого в контроллере:

 public function show($categorySlug, $subcategorySlug=null)
    {   
        $category = $this->categoryRepository->findBySlug($categorySlug);
        $child_categories=$this->categoryRepository->getChildCategories($category->id);
        if($child_categories->childrenProdut->count()==0)
        {
            $category=$category;
        }
        else{
            $category=$child_categories->childrenProdut;
        }
        return view('site.pages.category', compact('category','child_categories'));
    }

Категория Модель:

public function children()
{
    return $this->hasMany(Category::class, 'parent_id');
}
public function childrenProdut()
{
    return $this->hasMany(Category::class, 'parent_id');
}
public function products()
{
return $this->belongsToMany(Product::class, 'product_categories', 'category_id', 'product_id');
}

Просмотр:

Я получаю данные о категории и продукте, используя следующие утверждение:

 @forelse($category->products as $product)

Основная проблема:

Для одной категории я получаю данные, т.е. продукты этой категории, используя следующее:

public function findBySlug($slug)
{
    return Category::with('products')
        ->where('slug', $slug)
        ->where('menu', 1)
        ->first();
}

, но у меня есть манипулировал кодом для дочерних категорий

public function getChildCategories($id)
{
    return Category::with('children','products')->find($id); 
}

, но я не получаю все дочерние категории, но не получаю сопутствующие товары. Как видно из приведенного ниже изображения, массив продуктов пуст, существует некоторая проблема с отношениями. Пожалуйста, помогите решить. enter image description here

Выход:

enter image description here

1 Ответ

1 голос
/ 05 апреля 2020

Прежде всего, удалите childrenProdut (), так как эта функция выполняет те же функции, что и children ().

Категория Модель:

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

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

Сейчас в В случае, если я хочу получить все дочерние элементы, т.е. подкатегории и их продукты, используйте следующие фрагменты в контроллере.

Category::with(['children' => function($query){
    //the 'children' relationship should be called within an array
    //this way you could query the relationship as the eloquent model.
    //that way you could call the 'products' relationship inside the Category relationship.
    $query->with('products')
}]);
...