В руководстве Doctrine в максимально ограничьте отношения, он дает совет "Исключить несущественные ассоциации" и "избегать двунаправленных ассоциаций, если это возможно". Я не понимаю, какие критерии сделают ассоциацию "существенной".
Я говорю это, потому что кажется, что вы часто захотите перейти с одной стороны ассоциации "один-ко-многим", а не со стороны "Многие". Например, я хотел бы получить все Пользовательские PhoneNumbers, а не получать все активные PhoneNumbers и связанные с ними User. Это становится более важным, когда вам нужно пересекать несколько отношений "один ко многим", например. если вы хотите видеть всех пользователей с MissedCall за последние два дня (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, и гидратация, вероятно, не будет работать в любом случае. Вот почему я не понимаю, почему добавление обратных отношений - плохая идея.