2012-07-05 165 views
0

我正在使用Symfony2。這個DQL查詢是否正確?

我有一個實體Employee和一個OneToMany關聯的實體消息。

因此,員工可以收到一些消息,並且我想爲最近發送給特定員工的消息。

此查詢正確?

<?php 
    public function getLast($id_employee) 
    { 
    $query = $this->_em->createQuery(
       'SELECT MAX(m.sentAt) FROM MyBundle:Message m JOIN m.employee e 
        WHERE e.id = ' . $id_employee); 
    return $query->getSingleResult(); 
    }  

非常感謝

回答

1

你有沒有需要做JOIN因爲外部關鍵是alredy到您的message表,因爲我們可以認爲消息只屬於一個用戶一個用戶可以有多條與他有關的消息。

所以您的查詢就會

'SELECT MAX(m.sentAt), m.text 
FROM MyBundle:Message m 
WHERE m.employee_id = :id_employee' 

,你必須修改代碼以這種方式

$query = $this->_em->createQuery(
       'SELECT MAX(m.sentAt),m.text 
       FROM MyBundle:Message m 
       WHERE m.employee_id = :id_employee') 
       ->setParameter('id_employee',$employee_id) 
       return $query->getSingleResult(); 

但是,如果你不得不做加盟,請記住這一點很重要的事情

  1. 如果您的實體與關聯有關,並且您的唯一ON條件與關鍵字有關,則您無需與WHERE子句指定它
  2. 原則爲您提供一個「快」方法做這種類型的查詢,而無需直接使用DQL(或者用它只有一點點),並使用類似->leftJoin(..)->where(..)