@lev89

Как получить все товары родительских категорий?

Вывожу товары категории, если у товара category_id равен id данной категории. А как сделать, если у данной категории имеются родительская категория? Тогда при нажатии на родительскую категорию товары не выводятся, так как id у нее другой и не соответствует запросу. Мне надо, чтобы при выборе родительской категории, отображались все товары данной категории, а также все товары дочерних категорий если они есть

Контроллер:
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,
	]);
}

Модель:
class Category extends Model
{
    use Sluggable;
    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'name'
            ]
        ];
    }

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

Route:
Route::get('/category/{category_id:slug}', [\App\Http\Controllers\CategoryController::class, 'show'])->name('category.product');
  • Вопрос задан
  • 154 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
1. получаем все id категорий - свой и всех подчиненных. Зависит от того, каким образом организована иерархия. Если nested set, materialized path или подобное - один запрос (whereBetween или where('field', 'LIKE', "$path%") соответственно), если adjastency list - то, вероятно, запрос в цикле.
2. получаем все товары по списку id категорий (whereIn)

upd:
если nested set или materialized path - то можно обойтись вообще одним запросом с join или whereIn('category_id', function($query) {...})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы