src/Controller/OrderController.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Category;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use App\Repository\CategoryRepository;
  8. use App\Repository\ProductRepository;
  9. use Symfony\Component\HttpFoundation\Request;
  10. class OrderController extends AbstractController
  11. {
  12.     private $categoryRepository;
  13.     private $productRepository;
  14.     public function __construct(
  15.         CategoryRepository $categoryRepository,
  16.         ProductRepository $productRepository
  17.     )
  18.     {
  19.         $this->categoryRepository $categoryRepository;
  20.         $this->productRepository $productRepository;
  21.     }
  22.     /**
  23.      * @Route("/order", name="app_order")
  24.      */
  25.     public function index(Request $request): Response
  26.     {
  27.         // Obtener filtros del request
  28.         $search $request->query->get('search');
  29.         $category $request->query->get('category');
  30.         $maxPrice $request->query->get('price');
  31.         // Obtener el precio máximo de los productos
  32.         $highestPriceProduct $this->productRepository->findOneBy([], ['price' => 'DESC']);
  33.         $maxPriceLimit = ($highestPriceProduct ? ($highestPriceProduct->getPrice() / 100) + 100);
  34.         // Construir la consulta
  35.         $queryBuilder $this->productRepository->createQueryBuilder('p');
  36.         // Unir con la tabla de categorías
  37.         if ($category) {
  38.             $queryBuilder->join('p.categories''c')
  39.                         ->andWhere('c.id = :category')
  40.                         ->setParameter('category'$category);
  41.         }
  42.         if ($search) {
  43.             $queryBuilder->andWhere('p.name LIKE :search')
  44.                         ->setParameter('search''%' $search '%');
  45.         }
  46.         if ($maxPrice) {
  47.             $queryBuilder->andWhere('p.price <= :maxPrice')
  48.                         ->setParameter('maxPrice', ($maxPrice 100));
  49.         }
  50.         $products $queryBuilder->getQuery()->getResult();
  51.         $categories $this->categoryRepository->findAll();
  52.         return $this->render('order/index.html.twig', [
  53.             'products' => $products,
  54.             'categories' => $categories,
  55.             'max_price' => $maxPriceLimit,
  56.         ]);
  57.     }
  58. }