Как фильтровать по дочернему значению в Symfony PHPCR Query Builder

Попытка построить запрос в Symfony, который находит все узлы PHPCR определенного типа документа с заданным именем и фильтрует по городу его дочерний документ Address.

    $qb->from()
            ->document('My\Bundle\Document\MyDocument', 'm')
        ->end()
        ->where()
        ->andX()
            ->eq()
                ->upperCase()->field('m.name')->end()
                ->literal('SOME-NAME')
            ->end()
            ->child('address', 'a')
                ->eq()
                    ->upperCase()->field('a.city')->end()
                    ->literal('MADRID'))
            ->end();

Не могу заставить это работать, что будет лучшим подходом?

Спасибо!

1 ответ

Решение

Рабочий подход состоит в том, чтобы соединить документы и использовать дочернее условие:

    $qb
        ->from('u')
        ->joinInner()
            ->left()->document('My\Bundle\Document\MyDocument', 'm')->end()
            ->right()->document('My\Bundle\Document\Address', 'a')->end()
                ->condition()->child('a', 'm')->end()
            ->end()
        ->end()
        ->where()
            ->eq()
                ->upperCase()->field('u.name')->end()
                ->literal('SOME-NAME')->end()
            ->end()
        ->andWhere()
            ->eq()
                ->upperCase()->field('a.city')->end()
                ->literal('SOME-CITY')->end()
        ->end();
Другие вопросы по тегам