2015-11-06 92 views
0

我需要上個月創建的表中的所有數據。我已經創建了下面的代碼,但是它在DQL中給出了以下錯誤,但是SQL查詢在運行時是正確的。從Doctrine2上個月獲取數據

錯誤:

[Syntax Error] line 0, col 138: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '-' 

碼是:

$compCases = $this->getDoctrine() 
      ->getRepository('EFuturesCrmBundle:CasesCompensation') 
      ->createQueryBuilder('c') 
      ->select('c.id') 
      ->where('c.caseStatus =:status') 
      ->andWhere('YEAR(c.caseStatusDate) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)') 
      ->andWhere('MONTH(c.caseStatusDate) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)') 
      ->setParameter('status', 'resolve') 
      ->getQuery() 
      ->getResult(); 

DQL不支持INTERVAL所以在Doctrine2中這怎麼可能?

回答

3

嘗試使用這種方法:

$now = new \DateTime('now'); 
$delay = new \Datetime('last month'); 

$compCases = $this->getDoctrine() 
     ->getRepository('EFuturesCrmBundle:CasesCompensation') 
     ->createQueryBuilder('c') 
     ->select('c.id') 
     ->where('c.caseStatus = :status') 
     ->andWhere('c.caseStatusDate <= :now') 
     ->andWhere('c.caseStatusDate >= :delay') 
     ->setParameter('status', 'resolve') 
     ->setParameter('now', $now) 
     ->setParameter('delay', $delay) 
     ->getQuery() 
     ->getResult(); 

希望它可以幫助你。

+0

這是解決問題的一部分。但是我想從今天獲取數據。它應該是上個月的最後一個日期到上個月的第一個日期。 我怎樣才能得到上個月的最後一個日期而不是'現在= new DateTime('now');'? – Miuranga

+2

好吧,像這樣的例子:'$ from = new \ DateTime('上個月的第一天00:00:00'); $ to = new \ DateTime('本月的第一天00:00:00');' – scoolnico