Php 将多选择查询转换为原则DQL 桌子:

Php 将多选择查询转换为原则DQL 桌子:,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,字段id为的项目 带有字段id、项目id、照片、状态的项目照片。状态为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\u photos item\u id是items.id上的外键 实体: I

字段id为的项目

带有字段id、项目id、照片、状态的项目照片。状态为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\u photos item\u id是items.id上的外键

实体: Item实体在ItemPhoto上有一个OMANY

class Item { 
/**
 * @ORM\OneToMany(targetEntity="ItemPhoto", mappedBy="item")
 */
private $itemPhotos;
问题: 我希望在一次查询中返回项目中的所有记录,以及状态为2的一张照片或项目照片表中相同项目id的任何其他第一张照片,如果未找到照片,则返回null

注意:并非所有项目都有状态为2的项目_照片中的照片

到目前为止,在一个存储库类中,我有这样一个功能,它可以工作,但不是我想要的:

//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添加到此查询中时,从AppBundle:ItemPhoto p中选择p.photo,其中p.item=I.id限制0,1为photo2,它会给出错误信息。我可以使用IFNULL用SQL编写它,但是DQL不支持IFNULL。添加第二个select后,会出现什么错误?它说,p已经定义了[Semantical error]第0行,第172列靠近“p WHERE p.item=I.id”:错误:“p”已经定义。。如果我把p重命名为c,它会抱怨极限。如果我取消了返回超过1行的限制,它会抱怨基数冲突:1242子查询返回超过1行
//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);