В руководстве по доктрине, в разделе Максимально ограничьте отношения , он дает совет "Устранить несущественные ассоциации" и "избегать двунаправленных ассоциаций, если это возможно".Я не понимаю, какие критерии сделали бы ассоциацию «существенной».
Я говорю это, потому что кажется, что вы часто хотели бы идти от Одной стороны ассоциации Один-ко-многим, а не отМного сторон.Например, я хотел бы получить все активные номера телефонов пользователя, а не все активные номера телефонов и связанных с ними пользователей.Это становится более важным, когда вам нужно пройти через несколько отношений «один ко многим», например, если вы хотите видеть всех пользователей с MissedCall за последние два дня (MissedCall-> PhoneNumber-> User).
ThisВот как выглядит простой случай с обратной ассоциацией:
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, и гидратация, вероятно, не будет работатьYWAY.Вот почему я не понимаю, почему добавление обратных отношений - плохая идея.