Symfony 这个DQL查询正确吗?

Symfony 这个DQL查询正确吗?,symfony,doctrine-orm,Symfony,Doctrine Orm,我和Symfony2一起工作 我有一个实体员工和一个由OneToMany协会关联的实体消息 所以一个员工可以有一些消息,我想有一个最近发送的消息,对于一个给定的员工 这个问题正确吗 <?php public function getLast($id_employee) { $query = $this->_em->createQuery( 'SELECT MAX(m.sentAt) FROM MyBundle:Message m

我和Symfony2一起工作

我有一个实体员工和一个由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();
   }    

您不需要执行
加入
操作,因为您的
消息
表上已经有了外键,而且我们可以认为一条消息只属于一个用户,一个用户可以有多条与其相关的消息

因此,您的查询将是

'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();
然而,如果你必须加入,请记住这一点

  • 如果您的实体与关联相关,并且您在
  • 上的唯一
    条件是关于键,那么您不必使用
    WHERE
    子句指定它
  • 条令为您提供了一种“更快”的方法来执行此类查询,而无需直接使用
    DQL
    (或者只使用一点),也无需使用类似
    ->leftJoin(…)
    ->where(…)