如何只匹配Doctrine中最后更新的记录?

Ral*_*lph 6 php mysql symfony doctrine-orm

我正在使用Symfony2和Doctrine开发一个应用程序,并有一个名为status的表,我存储位置和日期簿,例如:

ID  | Book        | Date       | Location
------------------------------------------------
1   | Book_1      | 2011-08-29 | Home
2   | Book_1      | 2011-08-30 | Office
3   | Book_1      | 2011-09-02 | Friend's House
4   | Book_2      | 2011-09-02 | Office
5   | Book_2      | 2011-09-04 | Home
Run Code Online (Sandbox Code Playgroud)

具有最近日期的状态记录表示该书的当前(或最后已知)位置.在上面的示例中,Book_1目前位于"Friend's House"中,Book_2位于"Home"中.

以下代码获取在某些时候具有"Home"位置的任何记录:

$em = $this->getEntityManager();
$query = $em->createQuery('SELECT s FROM myBookTestBundle:Status s WHERE s.location=:x')->setParameter('x', 'Home');
$status = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

相反,我想只选择那些当前位置与"Home"相匹配的书籍.在上面的例子中,那只是记录ID = 5(Book_2).

有没有办法用DQL轻松完成这项工作?

任何帮助是极大的赞赏.

谢谢,
拉尔夫

Raf*_*ael 2

另一个问题是:“Doctrine2 的 DQL 可以处理子选择吗?”。

MySQL 的查询将是:

select ID,Book,`Date`,Location 
  from Status a 
  where `Date` = 
    (select max(`Date`) from Status group by Book having Book = a.Book) 
    and Location = 'Home';
Run Code Online (Sandbox Code Playgroud)