这个DQL查询是否正确?

时间:2012-07-05 13:47:00

标签: symfony doctrine-orm

我正在使用Symfony2。

我有一个实体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 个答案:

答案 0 :(得分:1)

您无需执行JOIN,因为外部密钥已放入您的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. 学说为你提供了一个更快的&#34;执行此类查询的方法,不直接使用DQL(或仅使用一点)并使用->leftJoin(..)->where(..)等内容