Problema con dos peticiones sobre una mesa en una sola acción
-
29-09-2019 - |
Pregunta
I tiene una acción con dos peticiones sobre una mesa única. Los resultados de las solicitudes deben ser diferentes.
Sin embargo, el resultado es el mismo para mis dos solicitudes y se trata de mi segunda petición.
// 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();
Solución 2
Es tal vez no sea la mejor manera, pero tengo que resolver el problema de seleccionar todas las filas de mi mesa en una petición, y después de, I ordenar los resultados usando PHP
Otros consejos
Comparación de las dos consultas que genera. No sé cómo se puede lograr esto en Doctrina 1. En Doctrina 2 puede activar un registrador, por lo que todo SQL ejecutada se para, por ejemplo, la salida estándar.
Una otra cosa.
Cuando se utiliza la fecha y hora actual en una consulta que shoud definir una variable con la fecha y hora actual y el uso de esta variable en ambas consultas. En este caso, sería algo como:
$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();
No puede haber un retraso de (más de) un segundo entre la ejecución de los dos estados, lo que hace que sus consultas no fiable.