Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

App Location Véhicule recherche vehicle par date entre des locations

$
0
0

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


Viewing all articles
Browse latest Browse all 1542

Trending Articles