Symfony 这个DQL查询正确吗?
我和Symfony2一起工作 我有一个实体员工和一个由OneToMany协会关联的实体消息 所以一个员工可以有一些消息,我想有一个最近发送的消息,对于一个给定的员工 这个问题正确吗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
<?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(…)
等