Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.04.2022 10:41:05

Вывод товаров категорий

Модель:

class Category extends Model
{
    use Sluggable;
    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'name'
            ]
        ];
    }
    public function parent()
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }
    public function categories()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }

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


    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

Контроллер

class CategoryController extends Controller
{
    public function show($slug)
    {
        $category = Category::where('slug', $slug)->first();
        $products = $category->products()->orderBy('created_at')->paginate(12);
        return view('category.product', [
            'products' => $products,
            'category' => $category
        ]);
    }
}

Данный код выводит все товары одной категории, по ключу slug. Но проблема в том, что категории могут быть вложенные и мне надо, чтобы выводились все товары, в том числе дочерних (если есть) категорий. Например, если выбрать родительскую категорию, то показать список всех товаров (в том числе товары дочерних категорий), а если выбрать только дочернюю категорию, то показать только те товары, которые находятся в данной дочерней категории. Как реализовать такой метод?

Не в сети

#2 17.04.2022 14:52:34

i3bepb
Откуда: Екатеринбург
Сообщений: 20

Re: Вывод товаров категорий

Надо смотреть структуру БД.

А вообще надо менять products() — это описание связи «один ко многим» и тут опушены указание полей в таблицах, т.к. их название совпадают с названиями по умолчанию. Т.е. мы можем products() записать так:

PHP
    public function products()
    {
        return 
$this->hasMany(Product::class, 'category_id''id');
    }

Т.е. в таблице с товарами есть колонка category_id в ней id категории к которой относится товар. Т.е. нам надо указать id категории не только родительской, но всех дочерних категории.

Я бы начал решать эту задачу с SQL запроса, т.е. какой должен получится запрос. Если появится понимание на уровне БД какой должен получится запрос, то и тут легче будет разобратся.

Не в сети

#3 18.04.2022 07:22:12

Re: Вывод товаров категорий

Структура БД такая:

categories(id, parent_id, name, slug, ...)
products(id, category_id, name, slug, price, ...)

Не в сети

Подвал раздела