表:
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 .