Laravel的BelongsTo和HasOne有什么区别?

时间:2016-06-02 04:46:17

标签: php laravel laravel-5 eloquent

任何机构都可以告诉我之间的主要区别是什么 雄辩中的 BelongsTo HasOne 关系。

5 个答案:

答案 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关系的倒数。   以UserPhone模型为例,举例说明。

我在用户与电话之间给予了一个关系。

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