gpt4 book ai didi

doctrine - 什么时候在 Doctrine2 中保持反向关系是值得的?

转载 作者:行者123 更新时间:2023-12-03 23:55:23 25 4
gpt4 key购买 nike

在 Doctrine 手册中,在 Constrain relationships as much as possible 下,它给出了“消除不必要的关联”和“尽可能避免双向关联”的建议。我不明白什么标准会使关联变得“必不可少”。

我这样说是因为您似乎经常希望从一对多关联的一侧而不是多侧进行。例如,我想获取用户的所有事件电话号码,而不是获取所有事件电话号码及其关联的用户。当您必须遍历多个一对多关系时,这变得更加重要,例如如果您想查看过去两天内有 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 来说是微不足道的,而使用 SQL 是不可能的DQL 和补水可能无论如何都行不通。这就是为什么我不明白为什么添加逆关系是个坏主意。

最佳答案

使用 Doctrine,我只在需要时定义关系。这意味着定义的所有关系实际上都在代码库中使用。

对于在项目的不同领域工作的大型团队的项目,并不是每个人都会习惯 Doctrine、它的当前配置以及急切/延迟加载关系。如果您定义了非必要且可能没有意义的双向关系,则可能会导致对以下数据的额外查询:

  • 不得使用
  • 之前可能已选择

  • 仅定义基本关系将使您能够更好地控制您和您的团队如何遍历您的数据并减少额外或过大的查询

    22/08/2011 更新

    我所说的基本关系是指您使用的关系。定义一个你不会使用的关系是没有意义的。例如:
  • \Entity\Post\Entity\User 有明确的关系和 \Entity\Comment
  • 使用 $post->user获取作者
  • 使用 $post->comments获取所有评论
  • \Entity\User\Entity\Post 有明确的关系和 \Entity\Comment
  • 使用 $user->posts获取所有用户帖子
  • 使用 $user->comments获取所有用户评论
  • \Entity\Comment只与\Entity\User有关系
  • 使用 $comment->user获取作者
  • 无法使用 $comment->post因为我没有在我的应用程序中检索它所属的帖子

  • 我不会认为它们是“反向”关系。如果在两个方向上使用数据都有意义,则将它们视为“双向”。如果它没有意义,或者您不会那样使用数据,请不要定义它。

    我希望这是有道理的

    关于doctrine - 什么时候在 Doctrine2 中保持反向关系是值得的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7004592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com