Сравните два запроса, которые он генерирует. Я не знаю, как вы можете сделать это в Doctrine 1. В Doctrine 2 вы можете включить регистратор, поэтому весь исполняемый SQL будет записан, например, в стандартный вывод.
Еще одна вещь.
Когда вы используете текущую временную метку в запросе, вы должны определить переменную с текущей временной меткой и использовать эту переменную в обоих запросах. В этом случае это будет что-то вроде:
$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();
Может быть задержка (более) секунды между выполнением двух операторов, что делает ваши запросы ненадежными.