Я хотел бы получить товары из категорий на 3 разных этажах. Все мои категории связаны отношениями (принадлежит для дочерней категории к родительской категории и hasMany от родительской к дочерней категории). Я могу сделать это одним способом, но я должен сделать прямо противоположное. (Отображение продуктов текущей категории + продуктов двух других в первой, отображение продуктов текущей категории + продуктов из приведенной ниже категории для второй и только продуктов текущей категории для третьей). Я не уверен, что делать с hasMany, так как foreach в where не работает.
Это мой текущий код:
public function viewCategory($category)
{
$currentCategory = Category::where('slug', $category)->firstOrFail();
$stage1 = $currentCategory->children()->get();
if (count($stage1) < 1){
$stage2 = Category::where('id', 0)->get();
}
else {
$stage2 = Category::where('id', $stage1->first()->id)->get();
}
//dd(count($stage1), count($stage2));
if(count($stage1) < 1 && count($stage2) < 1){
$activeProducts = Product::where('published', 0)->where('category_id', $currentCategory->id)
->simplePaginate(15);
$countProduct = Product::where('published', 0)->where('category_id', $currentCategory->id)
->get();
}
else if(count($stage1) > 0 && count($stage2) < 1) {
$activeProducts = Product::where('published', 0)->where('category_id', $currentCategory->id)
->orWhere('category_id', $stage1->id)
->simplePaginate(15);
$countProduct = Product::where('published', 0)->where('category_id', $currentCategory->id)
->orWhere('category_id', $stage1->id)
->get();
}
else if (count($stage1) > 0 && count($stage2) > 0) {
$activeProducts = Product::where('published', 0)->where('category_id', $currentCategory->id)
->orWhere('category_id', $stage1->frist()->id)
->orWhere('category_id', $stage2->first()->parent_id)
->simplePaginate(15);
$countProduct = Product::where('published', 0)->where('category_id', $currentCategory->id)
->orWhere('category_id', $stage1->first()->id)
->orWhere('category_id', $stage2->first()->parent_id)
->get();
}
$productCount = $countProduct->reject(function ($product) {
return $product->merchant->published === 0;
});
$productCount = $productCount->count();
$parentCategory = $currentCategory;
if ($currentCategory->parent_id != 0) {
while ($parentCategory->parent_id != 0) {
$parentCategory = Category::where('id', $parentCategory->parent_id)->first();
}
}
return view('customers.pages.categories.view', compact('currentCategory', 'parentCategory', 'activeProducts', 'productCount'));
}