Использовать таблицу связей Doctrine в запросе DQL или аналогичном - PullRequest
1 голос
/ 24 ноября 2011

(Возможно, решение моей проблемы простое, но я искал более часа и ничего не нашел.)

У меня есть две сущности, X и Y, с двунаправленной связью между ними. Для объекта X я бы сделал что-то вроде anXObject->getY(), чтобы получить все объекты Y, связанные с anXObject.

Как я могу получить только (возможно отсортированный) подмножество объектов, возвращаемых предыдущим оператором (возможно, с помощью оператора DQL или какого-то другого механизма, специфичного для Doctrine)?

Я мог бы сделать это с помощью SQL, используя таблицу ассоциаций X_Y, созданную Doctrine, но мне любопытно, может ли это быть сделано только с DQL. (Из того, что я понимаю, эта таблица ассоциации не может быть доступна из DQL.)


Обновление:

Вот мои сущности (для краткости я отбросил несущественные вещи): http://paste.pocoo.org/show/512177/

Чтобы прояснить, я хочу получить все объекты Serial, которые имеют определенный тег.

1 Ответ

1 голос
/ 24 ноября 2011

Вы используете yml - я знаком с аннотациями. Я думаю, что это правильно, хотя.

Прежде всего, стоит прочитать:

http://www.doctrine -project.org / документы / ОРМ / 2,1 / ный / ссылки / ассоциация-mapping.html # сбор владеющего-и-обратная сторона

Вам необходимо явно установить отношения между двумя сущностями, это то, что я забыл сделать пару раз.

Предполагая, что все отношения установлены правильно и fks записаны в таблицу соединений, вы сможете выполнить некоторые дополнительные действия с вашим DQL:

$query = $em->createQuery('
    SELECT s, t 
    FROM FooBarBundle:Serial s 
    JOIN s.tags t 
    WHERE t.name = "baz" 
    ORDER BY t.id ASC
');

Обратите внимание, что псевдоним для tags находится в списке полей; Я полагаю, это называется соединением извлечения?

Во всяком случае, по моему опыту, важно, чтобы отношения сохранялись в таблице соединений.

Надеюсь, это поможет:)

...