【问题标题】:How can make a INNER JOIN in a DQL sentence?如何在 DQL 语句中进行 INNER JOIN?
【发布时间】:2013-08-19 22:27:24
【问题描述】:

我在 Symfony2 项目中遇到了 DQL 问题。我定义了 3 个实体:

  • 一个名为 Category 的实体,有两个字段:id 和 slug
  • 名为 SubCategory 的实体有两个字段:id 和 slug
  • 一个名为 CategorySubCategories 的实体有两个字段:类别和子类别

我需要获取给定类别(slug)的子类别。我通过下一个 DQL 得到了它:

$em ->createQuery('SELECT subcat FROM SubCategory subcat WHERE subcat.id IN
                                        (SELECT IDENTITY(csc.subCategory) FROM  CategorySubCategories csc WHERE csc.category IN
(SELECT cat FROM Category cat WHERE cat.slug = :category))')
                    ->setParameter('category', $category);

有没有办法用 INNER JOINS 构建这个 DQL ?

以MySQL为例:

SELECT subcat.slug FROM Category cat INNER JOIN CategorySubCategories csc ON (cat.id = csc.category_id) INNER JOIN SubCategory subcat ON (csc.subcategory_id = subcat.id) WHERE cat.slug LIKE "$category"

还有什么可以翻译成 DQL 的吗?

【问题讨论】:

    标签: symfony doctrine-orm inner-join dql


    【解决方案1】:

    在我个人看来,不需要第三个实体,两个就够了(Category 和 SubCategory),只需在 SubCategory 和 Category 之间添加关联 ManyToOne,如下所述:http://docs.doctrine-project.org/en/2.1/reference/association-mapping.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多