我正在使用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();
}
非常感谢
答案 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();
但是如果你必须加入,请记住这些重要的事情
ON
条件与关键字相关,则您无法使用WHERE
条款指定DQL
(或仅使用一点)并使用->leftJoin(..)
,->where(..)
等内容