Получите детские ряды за 3 шага - PullRequest
0 голосов
/ 04 августа 2020

Я хотел бы получить товары из категорий на 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'));

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...