Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Модель:
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. Но проблема в том, что категории могут быть вложенные и мне надо, чтобы выводились все товары, в том числе дочерних (если есть) категорий. Например, если выбрать родительскую категорию, то показать список всех товаров (в том числе товары дочерних категорий), а если выбрать только дочернюю категорию, то показать только те товары, которые находятся в данной дочерней категории. Как реализовать такой метод?
Не в сети
А вообще надо менять products() — это описание связи «один ко многим» и тут опушены указание полей в таблицах, т.к. их название совпадают с названиями по умолчанию. Т.е. мы можем products() записать так:
public function products()
{
return $this->hasMany(Product::class, 'category_id', 'id');
}
Т.е. в таблице с товарами есть колонка category_id в ней id категории к которой относится товар. Т.е. нам надо указать id категории не только родительской, но всех дочерних категории.
Я бы начал решать эту задачу с SQL запроса, т.е. какой должен получится запрос. Если появится понимание на уровне БД какой должен получится запрос, то и тут легче будет разобратся.
Не в сети
Структура БД такая:
categories(id, parent_id, name, slug, ...)
products(id, category_id, name, slug, price, ...)
Не в сети
Страницы 1