Laravel的BelongsTo和HasOne有什么区别?

Par*_*nia 23 php laravel eloquent laravel-5

任何机构可以告诉我是什么样的区别主要
属于关联HasOne的关系雄辩.

jed*_*ylo 40

主要区别在于关系的哪一方持有关系的外键.调用$ 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'); 
  }
}
Run Code Online (Sandbox Code Playgroud)

示例一对多关系:

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'); 
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以在这里找到更简单的解释:/sf/ask/2104126461/ (2认同)

Ket*_*iya 11

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');
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这种关系,我可以使用用户模型获取Phone模型数据.

但使用HasOne的逆过程是不可能的.喜欢使用手机型号的Access User模型.

如果我想使用手机访问用户模型,则必须在手机型号中添加BelongsTo.

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

您可以参考此链接以获取更多详细信息.

  • 据我了解,从数据库的角度来看,我们将使用`belongsTo`还是`hasOne`或两者都没有区别。假设我们有两个表“ A”和“ B”,而“ A”表具有对“ B”表的“ b_id”外键。为了实现这种逻辑,我可以使用`A.belongsTo(B)`或`B.hasOne(A)`-这些关系中的任何一个都会在`A`表上创建`b_id`。因此,一次使用这两个关系的主要思想是能够从这两个模型中填充我们的价值?使用`A`,我将能够填充`B`,反之亦然。我对吗?非常感谢。 (2认同)