0

我正在使用 Symfony2。

我有一个实体 Employee 和一个由 OneToMany 关联相关的实体 Message。

所以一个员工可以有一些消息,我想要一个给定员工最近发送的消息。

这个查询正确吗?

<?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();
   }    

非常感谢

4

1 回答 1

1

您无需执行 a 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. Doctrine 为您提供了一种“更快”的方法来执行此类查询,而无需直接使用DQL(或仅使用一点)并使用类似->leftJoin(..),->where(..)等等
于 2012-07-05T13:56:24.360 回答