cache->getItem('list_category_'.$category)->isHit()) { // return $this->render('productList.html.twig', ['listType' => 'category_'.$category]); // } /** @var Product[] $products */ $products = Product::with(['price', 'lowestPrice']) ->selectRaw('products.*') ->distinct('products.id') ->fromRaw('products, json_each(products.categories)') ->whereRaw('json_each.value = ?', [$category]) ->orderByDesc('starred') ->orderByDesc('created_by') ->get(); $categoriesTree = []; foreach ($products as $product) { $categoriesTree = $this->addToTree($product->categories, $categoriesTree); dump($categoriesTree); } dd($categoriesTree); dd(); return $this->render('productList.html.twig', ['products' => $products, 'listType' => 'category_' . $category]); } private function addToTree(array $categories, mixed $categoriesTree) { // $tree = [ // "Elektronarzędzia" => [ // "Maszyny i narzędzia do cięcia" => [ // "Pilarki tarczowe" => [] // // ] // ] // ]; // dump($tree); // $test = &$tree['Elektronarzędzia']; // $test = &$test['Maszyny i narzędzia do cięcia']; // $test = &$test['Maszyny i narzędzia do cięcia2']; // $test = &$test['Maszyny i narzędzia do cięcia3']; // $test['node'] = []; // dump( // $tree // ); // // $tree2 = []; // $tree2['Elektronarzędzia'] = []; // $tree2['Elektronarzędzia']['Maszyny i narzędzia do cięcia'] = []; $tmp = &$categoriesTree; foreach ($categories as $category) { if (empty($tmp[$category])) { $tmp[$category] = []; $tmp = &$tmp[$category]; } else { $tmp = &$tmp[$category]; } } dump($categoriesTree); return $categoriesTree; } }