表:

items with field 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 中的所有记录,以及status_photos表中同一item_id的状态= 2的照片或任何其他第一张照片,如果没有找到照片,则返回null, in a single query .

注意:并非所有项目都在 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添加到此查询 (SELECT p.photo FROM AppBundle:ItemPhoto p WHERE p.item=i.id LIMIT 0,1) as photo2 时,它会给我错误 . 我可以使用IFNULL()用SQL编写它,但是DQL不支持开箱即用的IFNULL .