Как сделать INNER JOIN в предложении DQL?

У меня проблема с DQL в проекте Symfony2. Я определил 3 сущности:

  • Сущность под названием «Категория» с двумя полями: 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);

Можно ли как-то построить этот DQL с INNER JOINS?

В MysQL, например:

ВЫБЕРИТЕ subcat.slug ИЗ категории 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?


person fcerezo    schedule 19.08.2013    source источник


Ответы (1)


На мой взгляд, нет необходимости иметь третью сущность, достаточно двух (Категория и Подкатегория) и просто добавить ассоциацию ManyToOne между Подкатегорией и Категорией, как описано здесь: http://docs.doctrine-project.org/en/2.1/reference/association-mapping.html

person Thierry    schedule 27.08.2013