2014-09-29 30 views
0

我想在控制器中使用SQL從我的數據庫中選擇一些東西。Symfony2控制器中的新sql查詢

我想從數據庫中獲取最近12小時的所有事件。

這是我的控制器代碼:

public function SendDailyReportAction(Request $request){ 
     $em = $this->getDoctrine()->getManager(); 
     $query = $em->createQuery("SELECT * FROM MainCoreBundle:Event WHERE added_on >= DATE_SUB(NOW(), INTERVAL 12 HOUR)"); 
     $statement = $query->getResult(); 

     var_dump($statement); 

     return $this->render('MainAdminBundle:Reports:index.html.twig'); 

    } 

我做錯了什麼?全選(*)的替代選擇是什麼? 我是否寫過實體的好路徑?

錯誤:

[Syntax Error] line 0, col 7: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got '*' 

我解決這個問題是這樣的:

public function SendDailyReportAction(Request $request){ 
     $em = $this->getDoctrine()->getManager(); 
     $query = $em->createQuery("SELECT e FROM MainCoreBundle:Event e WHERE e.date >= DATE_SUB(CURRENT_DATE(), 4, 'MONTH')"); 
     $statement = $query->getResult(); 

     var_dump($statement); 

     return $this->render('MainAdminBundle:Reports:index.html.twig'); 

    } 

我改變:

  • DATE_SUB(NOW()來DATE_SUB(CURRENT_DATE( )

並添加爲@JoëlSalamin說別名e。

+0

顯示我們執行您的代碼時 – 2014-09-29 09:04:18

+0

@喬爾Salamin一個附加的錯誤我的問題內容 – Cre3k 2014-09-29 09:07:08

+0

試圖改變自己的查詢關鍵詞,比如,你有錯誤:'SELECT * FROM MainCoreBundle:事件WHERE ...' – 2014-09-29 09:10:03

回答

2

確定首先,我會建議將DQL放入Repository類,以保持代碼整潔。但是,爲了回答你的問題簡單地做到以下幾點:

$em = $this->getDoctrine()->getManager(); 
    $qb = $em->createQueryBuilder(); 

    $results = $qb->select('e') 
        ->from('MainCoreBundle:Event','e') 
        ->where('e.addedOn >= :datetime') 
        ->setParameter('datetime', new \DateTime('-12 hours')) 
        ->getQuery() 
        ->getOneOrNullResult(); 

    return [compact('results')]; 
+0

和added_on必須是來自表的名稱?或實體? – Cre3k 2014-09-29 09:28:52

+0

Doh !!!!編輯答案,實體屬性 – 2014-09-29 09:45:15

0

下面是一些更正您的查詢:

... 
$query = $em->createQuery("SELECT e FROM MainCoreBundle:Event e WHERE e.added_on >= DATE_SUB(NOW(), INTERVAL 12 HOUR)"); 
... 

希望這會幫助你。請參考:Doctrine - Querying for objects using Query Builder。這可以大大幫助您使用Doctrine查詢生成器的功能查詢您的數據庫。