2010-08-19 13 views
2

J'ai une action avec deux requêtes sur une table unique. Les résultats des demandes doivent être différents.Problème avec deux requêtes sur une table en une action

Mais, le résultat est le même pour mes deux demandes et cela vient de ma deuxième requête.

// Récupération du (ou des) locataire(s) actuel(s) du logement 
    $this->locataires = Doctrine_Query::create() 
     ->from('logement l') 
     ->leftJoin('l.Bail b') 
     ->leftJoin('b.Locataire') 
     ->where('l.id = ?', $request->getParameter('id')) 
     ->andWhere('(b.datefin >= ?', date('Y-m-d', time())) 
     ->orWhere("b.datefin = '0000-00-00')") 
     ->execute(); 

    // Récupération du (ou des) locataire(s) précédent(s) du logement 
    $this->locatairesprec = Doctrine_Query::create() 
     ->from('logement l') 
     ->leftJoin('l.Bail b') 
     ->leftJoin('b.Locataire') 
     ->where('l.id = ?', $request->getParameter('id')) 
     ->andWhere('b.datefin < ?', date('Y-m-d', time())) 
     ->andWhere("b.datefin != '0000-00-00'") 
     ->orderBy('datedeb') 
     ->execute(); 
+0

est ce PHP? Si oui, merci de le marquer. – leppie

+0

Vous sélectionnez par ID et l'ID est le même dans les deux requêtes. Pourquoi pensez-vous que cela retournerait un résultat différent? –

+0

ce n'est pas PHP ni SQL. c'est la Doctrine. –

Répondre

0

Il peut-être pas la meilleure façon, mais je dois résoudre le problème pour sélectionner toutes les lignes de ma table dans une demande, et après, je trier les résultats en utilisant PHP

0

Comparez les deux requêtes qu'il génère. Je ne sais pas comment vous pouvez accomplir cela dans Doctrine 1. Dans Doctrine 2 vous pouvez activer un logger, donc tout le SQL exécuté sera écrit, par exemple, dans la sortie standard.

Une autre chose. Lorsque vous utilisez l'horodatage actuel dans une requête, vous devez définir une variable avec l'horodatage en cours et utiliser cette variable dans les deux requêtes. Dans ce cas, il serait quelque chose comme:

$currentTime = time(); 

// Récupération du (ou des) locataire(s) actuel(s) du logement 
$this->locataires = Doctrine_Query::create() 
    ->from('logement l') 
    ->leftJoin('l.Bail b') 
    ->leftJoin('b.Locataire') 
    ->where('l.id = ?', $request->getParameter('id')) 
    ->andWhere('(b.datefin >= ?', $currentTime) 
    ->orWhere("b.datefin = '0000-00-00')") 
    ->execute(); 

// Récupération du (ou des) locataire(s) précédent(s) du logement 
$this->locatairesprec = Doctrine_Query::create() 
    ->from('logement l') 
    ->leftJoin('l.Bail b') 
    ->leftJoin('b.Locataire') 
    ->where('l.id = ?', $request->getParameter('id')) 
    ->andWhere('b.datefin < ?', $currentTime) 
    ->andWhere("b.datefin != '0000-00-00'") 
    ->orderBy('datedeb') 
    ->execute(); 

Il peut y avoir un délai de (plus) une seconde entre l'exécution des deux déclarations, ce qui rend vos requêtes peu fiables.

+0

merci, je vais essayer cela. Pour la parenthèse, je l'ai ouvert avant;) – Elorfin