属于和HasOne在Laravel有什么区别

2022-08-30 09:35:27

有谁能告诉我,在雄辩
,BelongsToHasOne关系的主要区别是什么。


答案 1

主要区别在于关系的哪一方持有关系的外键。调用的模型是 和 关系 中的自有模型,并持有所属模型的密钥。$this->belongsTo()one-to-onemany-to-one

示例一对一关系:

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'); 
  }
}

答案 2

BelongsTo是HasOne的反面。

我们可以使用 belongsTo 方法定义 hasOne 关系的反函数。以和模型为例。UserPhone

我正在给出从用户到电话的一个关系。

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

使用此关系,我能够使用用户模型获取手机模型数据。

但是使用HasOne的反过程是不可能的。例如使用电话模型的访问用户模型。

如果我想使用Phone访问用户模型,那么有必要在Phone模型中添加LegestTo

class Phone extends Model
{
    /**
     * Get the user that owns the phone.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

有关更多详细信息,请参阅此链接


推荐