【问题标题】:How to write exists subquery DQL for many to many association如何为多对多关联编写存在子查询 DQL
【发布时间】:2015-01-31 02:08:23
【问题描述】:

鉴于以下实体,有人可以帮助我了解如何编写与以下 SQL 等效的 DQL 吗?我似乎找不到一个很好的 DQL 子查询示例,它可以转换为数据透视表上的选择。谢谢!

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;
}

【问题讨论】:

    标签: doctrine-orm doctrine dql doctrine-query


    【解决方案1】:

    请看Doctrine Query Language

    你的例子可以写成:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      相关资源
      最近更新 更多