对于一对一关系,如果我在方法调用中完全指定了键,则hasOne
和belongsTo
关系之间有区别吗?或者,以不同的方式询问,如果我在关系的两边都使用了hasOne
,结果是否会相同?
最佳答案
是的,在某些情况下,可以指定键并使其起作用。在某些情况下,我的意思主要是检索结果。这是一个例子:
D B
users profiles
----- --------
id id
etc... user_id
etc...
楷模
两次对
hasOne
使用“错误”关系class User extends Eloquent {
public function profile(){
return $this->hasOne('Profile');
}
}
class Profile extends Eloquent {
public function user(){
return $this->hasOne('User', 'id', 'user_id');
}
}
查询
假设我们想从某个个人资料中吸引用户
$profile = Profile::find(1);
$user = $profile->user;
可以了但它本来应该是行不通的。它将
users
的主键视为在user_id
中引用profiles
的外键。并且尽管这可能行得通,但是在使用更复杂的关系方法时您会遇到麻烦。
例如
associate
:$user = User::find(1);
$profile = Profile::find(2);
$profile->user()->associate($user);
$profile->save();
该调用将引发异常,因为
HasOne
没有方法associate
。 (BelongsTo
拥有它)结论
而
belongsTo
和hasOne
在某些情况下的行为可能相似。他们显然不是。与关系的更复杂的交互将不起作用,并且从语义的角度来看这是毫无意义的。