【发布时间】:2020-02-08 23:34:24
【问题描述】:
为什么 Laravel 的 Eloquent 坚持 hasOne 关系中的外键必须在被引用的表中,而不是在父表中?
我要求一般的理解/丰富。
例如,来自 Laravel 文档:如果 User 有一个 Phone,则 Phone 模型应该有一个 user_id 外键。
这似乎是数据库要做的更多工作:去Phones 表中查找user_id,而不是phone_id 已经存在于User 模型上。
我假设以下这三个原因都适用 - 还有其他原因可以这样构建它吗?
- 它可以利用已经编写的逻辑来查找 has-many 关系(很明显为什么需要这样)。
- 可以轻松地将关系“迁移”到 has-many 关系。
- 它保证只要存在关系,
Phone模型实际上也确实存在。 (否则,User模型中的phone_id可能会指向Phones表中不存在的条目。)
【问题讨论】:
-
阅读量较大,但请查看en.wikipedia.org/wiki/Database_normalization。您所描述的与其说是 Laravel 问题,不如说是数据设计问题。简而言之,如果您在同一个表中有外部 id,它“属于另一条记录”,但如果本地键在外部表中,则该记录“有一个/许多其他记录”。跨度>