任何机构都可以告诉我之间的主要区别是什么 雄辩中的 BelongsTo 和 HasOne 关系。
答案 0 :(得分:30)
主要区别在于关系的哪一方持有关系的外键。调用 $ this-> belongsTo()的模型是一对一和多对一关系中拥有的模型并掌握着拥有模型的关键。
示例一对一关系:
class User extends Model {
public function car() {
// user has at maximum one car,
// so $user->car will return a single model
return $this->hasOne('Car');
}
}
class Car extends Model {
public function owner() {
// cars table has owner_id field that stores id of related user model
return $this->belongsTo('User');
}
}
示例一对多关系:
class User extends Model {
public function phoneNumbers() {
// user can have multiple phone numbers,
// so $user->phoneNumbers will return a collection of models
return $this->hasMany('PhoneNumber');
}
}
class PhoneNumber extends Model {
public function owner() {
// phone_numbers table has owner_id field that stores id of related user model
return $this->belongsTo('User');
}
}
答案 1 :(得分:9)
BelongsTo是HasOne的反转。
我们可以使用belongsTo方法定义hasOne关系的倒数。 以
User
和Phone
模型为例,举例说明。
我在用户与电话之间给予了一个关系。
class User extends Model
{
/**
* Get the phone record associated with the user.
*/
public function phone()
{
return $this->hasOne('App\Phone');
}
}
使用此关系,我可以使用用户模型获取手机型号数据。
但使用 HasOne 进行逆向处理是不可能的。喜欢使用手机型号的Access User模型。
如果我想使用手机访问用户型号,则需要在手机型号中添加 BelongsTo 。
class Phone extends Model
{
/**
* Get the user that owns the phone.
*/
public function user()
{
return $this->belongsTo('App\User');
}
}
您可以参考此link了解详情。
答案 2 :(得分:2)
一对一的关系:作为用户,您可以拥有一个( hasOne )个人资料。当然逆也适用。用户配置文件( belongsTo )。用户无法拥有多个个人资料,个人资料也不属于多个用户。
答案 3 :(得分:1)
如果要在两个表之间建立一对一关系,那么首先必须建立“ hasOne”关系,如果要使表成反比关系,那么就必须建立““属于” ......这是一个简单的区别如果您想了解HasOne和Belong之间的关系
一对多(反向)
现在我们可以访问帖子的所有评论,让我们定义一个关系,以允许评论访问其父帖子。要定义hasMany关系的逆关系,请在子模型上定义一个关系函数,该函数调用belongsTo
方法:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
/**
* Get the post that owns the comment.
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
答案 4 :(得分:0)
在这里您可以看到一个很好的例子,并了解口才中的 BelongsTo 和 HasOne 关系之间的区别。
雄辩的关系备忘单,作者Mahmoud Zalt https://link.medium.com/9lj9BAG8lR