一对一关联是用hasOne+belongsTo还是用hasOne+hasOne?
- 问题1
一对一关联是用hasOne+belongsTo还是用hasOne+hasOne?
- 问题2
有一个user表和user_info表,一对一的情况下user_info还需要用自增ID吗?按照我的理解是需要的自增ID的
当然是:
至于为什么不能是
User hasOne UserInfo
,UserInfo hasOne User
,我觉得你应该先了解一下hasOne
和belongsTo
的区别,我猜想你的表结构应该是如下:User hasOne UserInfo 的前提是,UserInfo 表中有一个 User 的外键
user_id
,如果两个模型互相都是hasOne
关系,那你 user 表中也需要写一个 UserInfo 的外键,比如:user_info_id
。hasOne 与 belongsTo 是从属关系,至于谁从属谁,就看谁的表中有另一个表的外键,比如
user_id
。如果 UserInfo 非要 hasOne User,并且 User 中又没有 UserInfo 的外键,就会报错,比如:
column “user_info_id” not found in user_table
这个是遵循 Laravel ORM 自动匹配模型外键的规则,模型名称+ID。
当然如果你非要用 hasOne,又不想创建
user_info_id
外键在 User 模型中,就需要手动指定外键,那这样就和 belongsTo 没区别了也可以这样来定义 hasOne 模型关系,但你看这样写的话,其实不就是 belongsTo 默认的写法嘛!