Bonjour à tous,

Je cherche à filtrer un créneau horaire grâce au code suivant sur une table contenant des données en mode tabulaire (voir image).

Nom : table creneaux.JPG
Affichages : 95
Taille : 49,1 Ko

Le filtre en question dans sa première partie est sensé rapatrier que les créneaux correspondant au paramètre ':heureclient':

Code : Sélectionner tout - Visualiser dans une fenêtre à part
->andWhere(':heuredepartmidi <= :heureclient and :heurefinmidi >= :heureclient')
or il me renvoie un tableau vide...

Si je fais (':heuredepartmidi >= :heureclient') par contre ça me ramène bien un tableau avec les informations correctes...

Doit on appliquer un format spécial aux champs Time pour qu'ils soient correctement interprétés ?
J'ai essayé de toutes les manières en mettant des new \datetime() mais ça n'a pas l'air d'être compatible avec les champs Time déclarés dans la base !

Cela oblige t'il à transformer les champs horaires de la table en Datetime au lieu de time ?

Merci d'avance pour vos réponses.

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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
public function checkerExistenceCreneau(string $dateClient, string $heureClient)
    {
        //$heureClient = new \DateTime($heureClient);
        //$dateClient = new \DateTime($dateClient);
 
        //Rechercher si la date choisie par le client est comprise dans un possible intervalle de créneaux
        //et récupérer l'id du créneau
        $q1 = $this->createQueryBuilder('d')
            ->setParameter('val', $dateClient)
            ->where('d.date_debut <= :val AND d.date_fin >= :val')
            ->getQuery()
            ->getOneOrNullResult();
 
        //Si résultat de requête $q1 non vide alors :
        if ($q1 != null) {
 
            //Récupération de la ligne de la table dans laquelle se trouve le créneau actif
            $idCreneau = $q1->getId();
 
            //Recherche du numéro de jour de la semaine correspondant à la date entrée par le client:
            $jour = date("N", strtotime($dateClient));
 
            //Rapatriement de tous les créneaux correspondants au jour choisi
            //Recherche linéaire dans la table tabulaire des créneaux pour récupérer les intervalles d'horaires et nombre de couverts
 
            switch ($jour) {
                case 1:
                    $colHeureDepartMidi = "c.lundi_midi_debut";
                    $colHeureFinMidi = "c.lundi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_lundi_midi";
 
                    $colHeureDepartSoir = "c.lundi_soir_debut";
                    $colHeureFinSoir = "c.lundi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_lundi_soir";
                    break;
 
                case 2:
                    $colHeureDepartMidi = "c.mardi_midi_debut";
                    $colHeureFinMidi = "c.mardi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_mardi_midi";
 
                    $colHeureDepartSoir = "c.mardi_soir_debut";
                    $colHeureFinSoir = "c.mardi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_mardi_soir";
                    break;
 
                case 3:
                    $colHeureDepartMidi = "c.mercredi_midi_debut";
                    $colHeureFinMidi = "c.mercredi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_mercredi_midi";
 
                    $colHeureDepartSoir = "c.mercredi_soir_debut";
                    $colHeureFinSoir = "c.mercredi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_mercredi_soir";
                    break;
 
                case 4:
 
                    $colHeureDepartMidi = "c.jeudi_midi_debut";
                    $colHeureFinMidi = "c.jeudi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_jeudi_midi";
 
                    $colHeureDepartSoir = "c.jeudi_soir_debut";
                    $colHeureFinSoir = "c.jeudi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_jeudi_soir";
                    break;
 
                case 5:
 
                    $colHeureDepartMidi = "c.vendredi_midi_debut";
                    $colHeureFinMidi = "c.vendredi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_vendredi_midi";
 
                    $colHeureDepartSoir = "c.vendredi_soir_debut";
                    $colHeureFinSoir = "c.vendredi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_vendredi_soir";
                    break;
 
                case 6:
 
                    $colHeureDepartMidi = "c.samedi_midi_debut";
                    $colHeureFinMidi = "c.samedi_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_samedi_midi";
 
                    $colHeureDepartSoir = "c.samedi_soir_debut";
                    $colHeureFinSoir = "c.samedi_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_samedi_soir";
                    break;
 
                case 7:
 
                    $colHeureDepartMidi = "c.dimanche_midi_debut";
                    $colHeureFinMidi = "c.dimanche_midi_fin";
                    $colNbrCouvertsMidi = "c.nbr_couverts_dimanche_midi";
 
                    $colHeureDepartSoir = "c.dimanche_soir_debut";
                    $colHeureFinSoir = "c.dimanche_soir_fin";
                    $colNbrCouvertsSoir = "c.nbr_couverts_dimanche_soir";
                    break;
                default:
                    return;
            }
 
            //Requête qui rapatrie les créneaux et nbr de couverts pour le jour et heure choisis :
            $heureClient=new \DateTime($heureClient);                  
 
            $q2 = $this->createQueryBuilder('c')
                ->select($colHeureDepartMidi, $colHeureFinMidi, $colHeureDepartSoir, $colHeureFinSoir, $colNbrCouvertsMidi, $colNbrCouvertsSoir)
                ->setParameters([
                    'idcreneau' => $idCreneau,                  
                    'heureclient'=>$heureClient, 
                    'heuredepartmidi'=> $colHeureDepartMidi,
                    // 'heurefinmidi'=> $colHeureFinMidi, 
                    // 'nbrcouvertsmidi'=> $colNbrCouvertsMidi,
 
                    // 'heuredepartsoir'=> $colHeureDepartSoir,
                    // 'heurefinsoir'=> $colHeureFinSoir,
                    // 'nbrcouvertssoir'=> $colNbrCouvertsSoir,
                ])    
 
                ->andWhere(':heureclient <= :heuredepartmidi')
                // ->orWhere(':heureclient >= :heuredepartsoir and :heureclient <= :heurefinsoir')
                ->andWhere('c.id = :idcreneau')
                ->getQuery()
                ->getResult();
 
            echo ('idCreneau =' . $idCreneau);
            dd($q2);         
 
            echo ('Des résultats ont été trouvés'), die;
 
            return $q1;
            return $q2;
        } else {
            echo ("Aucun créneau libre de réservation n'a été trouvé, veuillez choisir un autre jour ou consulter la liste des créneaux disponibles en cliquant sur le link qui s'affiche en bas de ce formulaire.");
        }