Php 将多选择查询转换为原则DQL 桌子:
字段id为的项目 带有字段id、项目id、照片、状态的项目照片。状态为0或1Php 将多选择查询转换为原则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 | 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);