gpt4 book ai didi

sql - 为什么 hasOne 关系中的外键需要位于引用表中?

转载 作者:行者123 更新时间:2023-12-02 19:50:02 26 4
gpt4 key购买 nike

为什么 Laravel 的 Eloquent 坚持 hasOne 关系中的外键必须位于引用表中,而不是位于父表中?

我要求获得一般性的理解/丰富。

例如,来自 Laravel 文档:如果 User 有一个 Phone,则 Phone 模型应该有一个 user_id 外键。

这似乎需要数据库做更多工作:在 Phones 表中查找 user_id,而不是已经存在的 phone_id存在于 User 模型中。

我假设以下三个原因都适用 - 还有其他原因以这种方式构建它吗?

  • 它可以利用已经编写的逻辑来查找多对多关系(很明显为什么需要这样)。
  • 这种关系可以轻松“迁移”为多对多关系。
  • 它保证只要存在关系,Phone 模型实际上也存在。 (否则,User 模型中的 phone_id 可能会指向 Phones 表中不存在的条目。)

最佳答案

This seems like more work for the database to do: to go and find the user_id in the Phones table, versus a phone_id already being present on the User model.

您在这里提到的是所谓的 BelongsTo 关系,实际上是 HasOne 或 HasMany 的逆关系。这意味着,如果用户拥有一部或多部电话,则该电话将通过 user_id 外键自动属于用户。这也意味着一部手机将只属于一个用户。

您对 HasOne 和 HasMany 之间的相似性的看法是非常正确的,因为它们以完全相同的方式使用外键。事实上,Eloquent 中唯一真正的区别是,对于 HasOne,它返回引用表中的第一个匹配项,而不是像 HasMany 那样返回所有可用的匹配项。

请注意,您的第三点不太正确,因为 phones 表中的 user_id 很可能不指向 中的现有条目>用户,除非您的数据库中存在强制外键指向现有条目的约束。

关于sql - 为什么 hasOne 关系中的外键需要位于引用表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58341266/

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