Bonjour,
Je viens vers vous car je n'arrive pas à faire un système de recherche de véhicule par date.
Contexte
Contexte: C'est une application de location de véhicule en ligne. Il y a donc plusieurs véhicule puis un système de location dans ma page 'Recherche de véhicule' l'utilisateur entre une date de début et une date de fin à ce moment je voudrais que le système ne retourne uniquement les véhicules disponible pour cette période.
Plan DB
vehicles : id | name | ...
location: id | vehicle_id | start_date | return_date | ...
Ce que je fais
Voici le code que j'ai effectué dans mon VehicleRepository
public function findAvailable(
$startDate = null,
$returnDate = null,
$gearbox = null,
$category = null
)
{
$query = $this->createQueryBuilder('v')
// Check if disable vehicle
->andWhere('v.is_active = 1')
// Check status if vehicle is not on Location / Maintenance or reserved
->andWhere('v.status != 2')
->andWhere('v.status != 3')
->andWhere('v.status != 4')
// Set Parameter
->orderBy('v.id', 'ASC')
;
if ( $startDate != null && $returnDate != null ) {
// Check Available
$query
->leftJoin( Location::class, 'l', 'WITH', 'l.vehicle = v.id')
->andWhere( ':startDate NOT BETWEEN l.start_date AND l.return_date' )
->andWhere( ':returnDate NOT BETWEEN l.start_date AND l.return_date' )
->andWhere( 'l.start_date NOT BETWEEN :startDate AND :returnDate' )
->andWhere( 'l.return_date NOT BETWEEN :startDate AND :returnDate' )
->setParameter( 'startDate', $startDate->date)
->setParameter( 'returnDate', $returnDate->date)
;
}
if ( $gearbox ) {
$query
->andWhere('v.gearbox = :gearbox')
->setParameter( 'gearbox', $gearbox );
}
if ( $category && $category->getId() != 0 ) {
$query
->andWhere('v.category = :category')
->setParameter( 'category', $category );
}
return $query
->getQuery()
->getResult();
}
Ce que je veux
Comme dit dans le contexte je souhaite afficher uniquement les véhicules n'ayant soit pas de location ou si il y a des locations alors qu'elles ne tombe pas dans les dates d'une location en cours
Ce que j'obtiens
Avec cette fonction aucuns véhicules ne return
Merci beaucoup pour l'aide