Bonjour,

Actuellement dans la phase d'implémentation de filtres d'intervalles (min et max) dans mon VehiculesRepository, les requêtes reviennent avec null en utilisant les variables en tant que paramètres dans le querybuilder :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
if ($prixMin != null && $prixMax != null) {
            $query->andWhere('v.prix_vente >= :prixMin and v.prix_vente <= :prixMax')
                ->setParameter(':prixMin', $prixMin)
                ->setParameter(':prixMax', $prixMax);
        }
, par contre, si je fais par exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
andWhere(v.prix_vente >= 100000 and v.prix_vente <=200000)
cela marche parfaitement ...

Je ne sais pas si il faut formatter les variables/paramètres d'une certaine façon ou bien si j'oublie une référence dans mon code JS car on dirait que les variables $prixMin et $prixMax ne sont pas disponibles dans le repository/querybuilder ou contiennent des valeurs nulles.

A noter que les variables sont bien présentes dans l'uri indépendament de cela... Merci d'avance pour votre expertise

filters.js :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
window.onload = () => {
  //Filtres de type input
  const filtersForm = document.querySelector("#filters");
 
  document.querySelectorAll("#filters input").forEach((input) => {
 
    input.addEventListener("input", () => {
      //Récupération des données du formulaire
      const Form = new FormData(filtersForm);
 
      //Création de la queryString
      const Params = new URLSearchParams();
 
      Form.forEach((value, key) => {
        Params.append(key, value);
      });
 
      //Récupération de l'url active
      const Url = new URL(window.location.href);
 
      //Lancement requête Ajax
 
      fetch(Url.pathname + "?" + Params.toString() + "&ajax=1", {
        headers: {
          "X-Requested-With": "XMLHttpRequest",
        },
      })
        .then((response) => response.json())
        .then((data) => {
          //Recherche de la zone de contenu
          const content = document.querySelector("#content");
 
          //Remplacement du contenu
          content.innerHTML = data.content;
 
          //Mise à jour de l'url
          history.pushState({}, null, Url.pathname + "?" + Params.toString());
        })
        .catch((e) => alert(e));
    });
  });
};
VehiculesRepository.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
 
namespace App\Repository;
 
use App\Entity\Vehicules;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
 
 
/**
 * @extends ServiceEntityRepository<Vehicules>
 *
 * @method Vehicules|null find($id, $lockMode = null, $lockVersion = null)
 * @method Vehicules|null findOneBy(array $criteria, array $orderBy = null)
 * @method Vehicules[]    findAll()
 * @method Vehicules[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class VehiculesRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Vehicules::class);
    }
 
    public function save(Vehicules $entity, bool $flush = false): void
    {
        $this->getEntityManager()->persist($entity);
 
        if ($flush) {
            $this->getEntityManager()->flush();
        }
    }
 
    public function remove(Vehicules $entity, bool $flush = false): void
    {
        $this->getEntityManager()->remove($entity);
 
        if ($flush) {
            $this->getEntityManager()->flush();
        }
    }
 
    //Pagination liste véhicules après filtre
    public function getVehiculesPaginated(int $page, int $limit = 100, $filtreTypes = null, $filtreMarques = null, int $prixMin = null, int $prixMax = null)
    {
        $limit = abs($limit);
 
        $query = $this->createQueryBuilder('v');
 
        //On filtre si filtre multicritères actif
        if ($filtreTypes != null) {
            $query->where('v.type_vehicule IN (:types)')
                ->setParameter(':types', array_values($filtreTypes));
        }
        if ($filtreMarques != null) {
            $query->andWhere('v.marque IN(:marques)')
                ->setParameter(':marques', array_values($filtreMarques));
        }
 
        //Filtre sur intervalle de prix
        if ($prixMin != null && $prixMax != null) {
            $query->andWhere('v.prix_vente >= :prixMin and v.prix_vente <= :prixMax')
                ->setParameter(':prixMin', $prixMin)
                ->setParameter(':prixMax', $prixMax);
        }
 
        dd($prixMax);
 
        $query->orderBy('v.marque')
            ->orderBy('v.prix_vente')
            ->setFirstResult(($page * $limit) - $limit)
            ->setMaxResults($limit);
 
        return $query->getQuery()->getResult();
    }