Когда стоит поддерживать обратные отношения в Doctrine2?

В руководстве по Доктрине, в разделе Максимально ограничивайте отношения , дается совет «Устраните несущественные ассоциации» и «Избегайте двунаправленных ассоциаций, если возможно». Я не понимаю, какие критерии сделали бы ассоциацию «существенной».

Я говорю это, потому что кажется, что вам часто нужно идти с Одной стороны ассоциации «Один ко многим», а не со стороны Многих. Например, я хотел бы получить все активные телефонные номера пользователя, а не все активные телефонные номера и связанного с ними пользователя. Это становится более важным, когда вам нужно пройти несколько отношений «один ко многим», например если вы хотите видеть всех пользователей с пропущенным вызовом за последние два дня (MissedCall-> PhoneNumber-> User).

Вот как будет выглядеть простой случай с обратной связью:

SELECT * FROM User u
LEFT JOIN u.PhoneNumbers p WITH p.active

Это сделает его более разумным если бы существовал способ пройти через данное отношение в противоположном направлении в DQL, например, следующий необработанный SQL:

SELECT * FROM User u
LEFT JOIN PhoneNumber p ON p.User_id = u.id AND p.active

Может ли кто-нибудь объяснить, почему они дают этот совет, и в каких случаях его стоит игнорировать?

- - Изменить -

Если есть смягчающие факторы или другие обходные пути, пожалуйста, дайте мне простой пример кода или ссылку.

Я не вижу никакого способа пройти через обратное отношение, если это обратное не определено, поэтому я ' Я собираюсь предположить, что создание собственного DQL - это , а не на самом деле решение - есть некоторые тривиальные соединения с SQL, которые невозможны с DQL, и гидратация, вероятно, все равно не сработает. Вот почему я не понимаю, почему добавление обратных отношений - плохая идея.

13
задан theazureshadow 15 August 2011 в 21:43
поделиться