在我的Symfony2应用程序中,代表资产管理系统的是一个名为Asset的实体。该实体与称为AssetLog的另一实体具有OneToMany关系。每个AssetLog都链接到一个也是实体的状态。在entityRepository中查找联合实体的最后一个实体(Symfony2&Doctrine2)
例如: 可能有一个名为Car的资产。 这辆车记录了它发生了什么,发生了什么事,谁负责这件事。 每个日志条目链接到一个状态可能是:完美的条件,损坏,丢失,被盗等
我想要做的是在assetrepository中写一个查询,将给我所有的资产与一个被盗。
这意味着例如:所有的汽车的最新日志条目都链接到被盗状态。
我很苦恼,因为我需要每个资产的最后一个日志条目。只有当该条目链接到特定状态时,才需要该资产。
在我的具体例子中曾经被盗,但又回来的汽车不应该出现在列表中。
有谁知道这是否可以使用QueryBuilder,如果是这样,怎么做?
编辑:
或许它会帮助,如果我形容我做了什么让在SQL期望的结果。这是我的SQL查询:
select *
from asset a
join asset_log l
on l.asset_id = a.id
left join asset_log l2
on l2.asset_id = l.asset_id
and l.id > l2.id
where l.receiver_id = 12345
group by l.asset_id
这工作完全,但如何在DQL写的吗?这是我最好的尝试:没有错误执行
$qb->select('a', 'l', 'l2')
->from('AssetBundle:Asset', 'a')
->join('a.logEntries', 'l')
->leftJoin('a.logEntries', 'l2', 'ON', 'l2.asset = l.asset')
->where("l.receiver = 12345")
->andWhere('l.id > l2.id')
->groupBy('a.id')
这DQL查询,但给出了不同的结果:资产应该是可见的(因为它们是在SQL查询)失踪。
善于思考!我能够在Doctrine2语法中创建连接。子选择查询还没有,但如果有人知道如何实现这个...?感谢弗朗索瓦! –