考虑两个模型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。