Je fais un site de reservation de chambres. (enfin j'essaye!)
Le scénario qui doit se passer: l'utilisateur arrive sur la page. il y a deux inputs(Date). un pour la date d'entré l'autre pour la date de sortie.
L'utilisateur entre les dates, clique sur voir les disponibilité et il lui est retourné les chambres disponibles.
Sauf que voilà, je ne parviens pas à faire ma requête comme il faut.
J'ai une table booking qui contient les propriété $start et $end et j'ai une autre table room.
J'ai aussi créé deux chambre pour tester tout ca. pour l'instant aucune n'a de reservation. ca devrai donc me retourner un tableau avec les deux chambre.
l'idée serait donc de dire en sql, retourne moi les rooms qui ne contiennent pas de booking à cette période.
class RoomRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Room::class);
}
public function findByAvailableBookings($start, $leave): array
{
// automatically knows to select Products
// the "r" is an alias you'll use in the rest of the query
$qb = $this->createQueryBuilder('r')
->join('r.bookings', 'b')
->where('b.start <= :start ')
->andWhere('b.leave >= :leave')
->orWhere('b.start >= :start')
->andWhere('b.leave <= :leave')
->orWhere('b.start >= :start')
->andWhere('b.leave >= :leave')
->andWhere('b.start <= :leave')
->orWhere('b.start <= :start')
->andWhere('b.leave <= :leave')
->andWhere('b.leave >= :start')
->setParameter('start', $start)
->setParameter('leave', $leave);
$query = $qb->getQuery();
return $query->execute();
// to get just one result:
// $room = $query->setMaxResults(1)->getOneOrNullResult();
}
A ce code actuel j'ai un tableau vide dans mon dump.
j'ai aussi essayé l'inverse, c'est a dire insérer la fonction dans BookingRepository, changé r.bookings pour b.room et tout le r pour des b tout ca mais rien ne fais, j'ai toujours un tableau vide
je me sens quelque peu perdu
Merci de votre aide.
- Edité par Frigalou 16 septembre 2021 à 11:42:56
symfony 5.3.7 et requête sql
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.