items
的 id
id
--
1
2
3
带有字段item_photos
的 id, item_id, photo,status
。状态为0或1。
id | item_id | photo | status
-----------------------------
1 1 a.jpg 1
2 1 b.jpg 1
3 1 c.jpg 2
4 2 d.jpg 1
item_photos item_id是items.id
上的外键Item实体在ItemPhoto上有OneToMany
class Item {
/**
* @ORM\OneToMany(targetEntity="ItemPhoto", mappedBy="item")
*/
private $itemPhotos;
我想返回items
的所有记录,以及状态= 2的一张照片或item_photos表中同一item_id的任何其他第一张照片,如果找不到照片,则返回null, in单个查询。
注意:并非所有项目都在item_photos
中有状态= 2的照片。
在Repository类中,到目前为止,我有这个,它可以工作,但不是我想要的:
//Solution can be using query builder, or create query, doesn't matter
//
$em = $this->getEntityManager();
$dql = "SELECT i,
(SELECT p.photo FROM AppBundle:ItemPhoto p WHERE p.status='2' AND p.item=i.id) as photo1,
FROM AppBundle:Item i";
$query = $em->createQuery($dql);
当我在此查询(SELECT p.photo FROM AppBundle:ItemPhoto p WHERE p.item=i.id LIMIT 0,1) as photo2
中添加另一个选择时,它会给我错误。我可以使用IFNULL()编写SQL,但DQL不支持开箱即用的IFNULL。