在 Doctrine 手册中,在尽可能地约束关系下,它给出了“消除不必要的关联”和“尽可能避免双向关联”的建议。我不明白什么标准会使关联“必不可少”。
我这样说是因为您似乎经常想要从一对多关联的一侧而不是从多侧。例如,我想获取用户的所有活动电话号码,而不是获取所有活动电话号码及其关联的用户。当您必须遍历多个一对多关系时,这一点变得更加重要,例如,如果您想查看过去两天内有未接来电的所有用户(未接来电->电话号码->用户)。
这就是简单情况下反向关联的样子:
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 来说是微不足道的,而使用 SQL 是不可能的DQL,和水合作用可能无论如何都行不通。这就是为什么我不明白为什么添加逆关系是一个坏主意。