2014-04-25 37 views
1

我有兩個相互關聯的表(main_table OneToMay detail_table)。主表中有deadline_days字段,detail_table中有create_date。我想根據今天的日期選擇所有的細節,其中create_date + main.deadline_days通過。 (這是方案)
如何使用DATE_ADD在Doctrine和Symfony2中使用createQueryBuilder比較日期範圍

這是正確的MySQL查詢時,我想創建一個使用createQueryBuilder談到與此錯誤

[Syntax Error] line 0, col 165: Error: Expected Doctrine\ORM\Query\Lexer::T_COMMA, got 'M' 
查詢這給了我正確的記錄

SELECT `D`.* FROM `details_table` AS `D` 
INNER JOIN `main_table` AS `M` ON (`D`.`Main_Id` = `M`.`id`) 
WHERE DATE_ADD(`D`.`Create_Date`, INTERVAL `M`.`Deadline_days` DAY) <= NOW() 

現在的Symfony

這是我在查詢構建器現在有

$result = $this->createQueryBuilder('D') 
->join('D.Main', 'M') 
->where('DATE_ADD(D.Create_Date, INTERVAL M.DeadLine_Days DAY) <= NOW()') 
->getQuery() 
->getResult(); 

任何想法如何解決這個問題? 在此先感謝。

請不要建議使用本機查詢

回答

1

這是我發現的基礎此鏈接(Doctrine Update DQL function signature
Doctrine2具有功能DATE_ADD但沒有間隔PARAM作爲MySQL的,也是單位PARAM應作爲字符串'DAY';因此,查詢應該是:

$result = $this->createQueryBuilder('D') 
    ->join('D.Main', 'M') 
    ->where('DATE_ADD(D.Create_Date, M.DeadLine_Days, 'DAY') <= CURRENT_DATE()') 
    ->getQuery() 
    ->getResult(); 

在教義,我們應該用CURRENT_DATE()代替NOW()