Doctrine orm 如何为多对多关联编写exists子查询DQL

Doctrine orm 如何为多对多关联编写exists子查询DQL,doctrine-orm,doctrine,dql,doctrine-query,Doctrine Orm,Doctrine,Dql,Doctrine Query,考虑到下面的实体,有人能帮助我理解如何编写与以下SQL等价的DQL吗?我似乎找不到一个DQL子查询转换为透视表上的select的好例子。谢谢大家! select * from event a where exists ( select * from event_category b where b.event_id = a.id and b.category_id = 1 ) 实体: /** *

考虑到下面的实体,有人能帮助我理解如何编写与以下SQL等价的DQL吗?我似乎找不到一个DQL子查询转换为透视表上的select的好例子。谢谢大家!

select *
from event a
where exists (
          select *
          from event_category b
          where b.event_id = a.id
            and b.category_id = 1
      )
实体:

/**
 * @Entity
 * @Table(name="event")
 */
class Event
{
    /**
     * @Column(type="integer")
     * @Id
     */
    protected $id;

    /**
     * @JoinTable(
     *   inverseJoinColumns={
     *     @JoinColumn(name="category_id", referencedColumnName="id")
     *   },
     *   joinColumns={
     *     @JoinColumn(name="event_id", referencedColumnName="id")
     *   },
     *   name="event_category"
     * )
     * @ManyToMany(targetEntity="Category")
     */
    protected $categories;
}

/**
 * @Entity
 * @Table(name="category")
 */
class Category
{
    /**
     * @Column(type="integer")
     * @Id
     */
    protected $id;
}
请看一看

你的例子可以写成:

SELECT event FROM Event event
WHERE EXISTS (
    SELECT cat FROM Category cat 
    WHERE IDENTITY(cat.event) = event.id
    AND cat.id = 1
)
现在我可能错了,但我认为这里不需要子查询

如果需要具有给定类别的事件:

SELECT event FROM Event event JOIN event.category WHERE category.id = 1