Проблема с двумя запросами на таблицу в одном действии - PullRequest
2 голосов
/ 19 августа 2010

У меня есть действие с двумя запросами к уникальной таблице. Результаты запросов должны быть разными.

Но результат одинаков для двух моих запросов, и он получен из моего второго запроса.

    // 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();

Ответы [ 2 ]

0 голосов
/ 31 марта 2011

Возможно, это не самый лучший способ, но я решил проблему, чтобы выбрать все строки моей таблицы в одном запросе, и после этого я сортирую результаты, используя PHP

0 голосов
/ 19 августа 2010

Сравните два запроса, которые он генерирует. Я не знаю, как вы можете сделать это в 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();

Может быть задержка (более) секунды между выполнением двух операторов, что делает ваши запросы ненадежными.

...