原文链接:https://www.jianshu.com/p/519728494b5d
在某一个 class 里面,class_name 所对应的表为主表(父),
关系函数方法里面的第一个参数所对应的表为从属表(子),
即为与主表相关联的表。
$has~
1、外键保存在关联表中;
2、保存时自动更新关联表的记录;
3、删除主表记录时自动删除关联记录。
$belongsTo
1、外键放置在主表中;
2、保存时不会自动更新关联表的记录;
3、删除时也不会更新关联表的记录。
下面这种说法比较好理解
打个比方,一个人有一部手机,在人也就是用户 model 中,你肯定要用 hasOne 而不是 belongsTo,因为你不能说人是属于手机(虽然也可以这样,但不符合常理,会让人觉得莫名其妙);在手机 model 中使用 belongsTo,意味着手机是物件,人是主体,也就是手机是人类的附属品,且只能有一个。使用的方法名也要 [切合实际],这样读代码自己或别人才能看明白。
在使用时,其结果都是返回当前用户的手机或是手机的用户(你可以选择 collection 类型也可以选择 array 类型)。注意。在写方法名的时候,最好使用单数(例如 phone 或者 user)而不是复数(因为手机和人相对的都是单个的,应该用单数,这样的命名才更符合逻辑与事实)。