考虑两个模型A
和B
A
-> relatedToB
是一个one to one
关系
使用(A-> hasOne
-B)和(A-> belongsTo
-B)有什么区别?
我可以互换使用吗?
Answers:
不,区别取决于您的外键在哪里。
在您的示例中,如果A
有b_id
列,则A
belongsTo
B
。
如果B
有一a_id
列,然后A
hasOne
或hasMany
B
取决于有多少B
应该有。
B
也不能BelongTo
A
吗?
A
有b_id
专栏。在这种情况下,我可以使用A.belongsTo(b)
或B.hasOne(A)
。在这两种情况下,ORM都会添加b_id
到A
表中。那么,这里有什么区别?你能解释一下吗?
B
但只设置id A
,则同时设置这两个选项将很有用,那么您将需要执行诸如A::find($id)->B
使用该A.belongsTo(b)
关系的操作。反之,如果您需要查询一个,A
但您仅有的是一个的ID B
,那么您将需要B.hasOne(A)
关系B::find($id)->A
。
主要区别如下:
belongsTo
和belongsToMany
-你告诉Laravel,该表认为,它连接到其他表的外键。
hasOne
和hasMany
-你告诉Laravel,该表没有外键。
belongstoMany
(许多一对多)的关系不保持对表本身的关键,但在数据透视表。
包含外键的模型的表中将具有belongsTo(),而包含外键的模型的表中包含该外键引用的主键将具有hasOne()...具有外键的模型将很容易具有belongsTo(),并且在该关系中不包含外键的那个将具有hasOne()。不,它们不能使用错误的方法互换,因此将始终返回null。