2012-07-05 148 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(..)