将多个选择查询转换为Doctrine DQL

时间:2016-03-06 07:42:00

标签: php mysql symfony doctrine-orm

表:

带有字段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。

0 个答案:

没有答案