对于一对一关系的情况,如果我在方法调用中完全指定了键,那么hasOne
和belongsTo
关系之间是否存在差异?或者,换句话说,如果我在关系的两边使用hasOne
,它会是相同的结果吗?
答案 0 :(得分:12)
是的,它适用于某些个案,以指定密钥并使关系起作用。在某些情况下,我的意思是主要是检索结果。这是一个例子:
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
在某些情况下的行为可能相似。他们显然不是。与关系的更复杂的互动不会起作用,而且从语义的角度来看它是无意义的。