@Qixing

Как составить запрос на DQL со связями сущностей?

Добрый день.

Нужна помощь в составлении запроса. Есть таблица товаров и таблица категорий с двумя уровнями. Прилагаю вырезки YML, по которым сгенерированы сущности в Symfony.

Item
manyToOne:
    category:
        targetEntity: Category
        cascade: {  }
        mappedBy: null
        inversedBy: item
        joinColumns:
            category:
                referencedColumnName: id
        orphanRemoval: false


В свою очередь

Category
oneToMany:
    childrenCategory:
        targetEntity: Category
        mappedBy: parentCategory
    item:
        targetEntity: Item
        mappedBy: category
manyToOne:
     parentCategory:
        targetEntity: Category
        cascade: {  }
        mappedBy: null
        inversedBy: childrenCategory
        joinColumns:
            parent_category:
                referencedColumnName: id
        orphanRemoval: false


Чтобы найти товары по конечной категории, тут все просто. Они есть в самой таблице item.
$query = $query->where('i.category = :category')
                ->setParameter('category', $categoryId);


Но я хочу найти товары по родительской категории. В теории нам надо сделать join на category.id на item.category и потом добавить условие с моим parentId.
Набросал так:
$query = $query->join('i.category', 'c', 'WITH', 'i.id = c.parentCategory')
            ->where('c.parentCategory = :mainCategory')
            ->setParameter('mainCategory', $mainCategoryId);


В итоге ничего так как расшифровке запроса мы видим:
SELECT DISTINCT c0_.id AS id0, c0_.id AS id1 FROM crbr_item c0_ INNER JOIN crbr_category c1_ ON c0_.category = c1_.id AND (c0_.id = c1_.parent_category) WHERE c1_.parent_category = '20


Тут явно лишняя строка
AND (c0_.id = c1_.parent_category)

Как от нее избавиться? Не хочется использовать чистый SQL, а все же DQL, тем более, что есть связи, включая выборку дочерних, и можно сделать по-уму. Спасибо!
  • Вопрос задан
  • 2491 просмотр
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
$query->innerJoin('i.category', 'c')
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы