<?php
namespace App\Controller;
use App\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\CategoryRepository;
use App\Repository\ProductRepository;
use Symfony\Component\HttpFoundation\Request;
class OrderController extends AbstractController
{
private $categoryRepository;
private $productRepository;
public function __construct(
CategoryRepository $categoryRepository,
ProductRepository $productRepository
)
{
$this->categoryRepository = $categoryRepository;
$this->productRepository = $productRepository;
}
/**
* @Route("/order", name="app_order")
*/
public function index(Request $request): Response
{
// Obtener filtros del request
$search = $request->query->get('search');
$category = $request->query->get('category');
$maxPrice = $request->query->get('price');
// Obtener el precio máximo de los productos
$highestPriceProduct = $this->productRepository->findOneBy([], ['price' => 'DESC']);
$maxPriceLimit = ($highestPriceProduct ? ($highestPriceProduct->getPrice() / 100) + 1 : 100);
// Construir la consulta
$queryBuilder = $this->productRepository->createQueryBuilder('p');
// Unir con la tabla de categorÃas
if ($category) {
$queryBuilder->join('p.categories', 'c')
->andWhere('c.id = :category')
->setParameter('category', $category);
}
if ($search) {
$queryBuilder->andWhere('p.name LIKE :search')
->setParameter('search', '%' . $search . '%');
}
if ($maxPrice) {
$queryBuilder->andWhere('p.price <= :maxPrice')
->setParameter('maxPrice', ($maxPrice * 100));
}
$products = $queryBuilder->getQuery()->getResult();
$categories = $this->categoryRepository->findAll();
return $this->render('order/index.html.twig', [
'products' => $products,
'categories' => $categories,
'max_price' => $maxPriceLimit,
]);
}
}