2

我在一个独特的表上有两个请求的操作。请求的结果必须不同。

但是,我的两个请求的结果是相同的,它来自我的第二个请求。

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

2 回答 2

0

比较它生成的两个查询。我不知道您如何在 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();

两个语句的执行之间可能会有(超过)一秒的延迟,这会使您的查询不可靠。

于 2010-08-19T13:14:54.737 回答
0

这可能不是最好的方法,但我已经解决了在一个请求中选择表的所有行的问题,然后,我使用 PHP 对结果进行排序

于 2011-03-31T13:59:31.930 回答