首先,这3个的大致中文意思:

hasOne:有一个,加上主谓语应该是 ,A 有一个 B
hasMany:有很多,A 有很多 B
belongsTo:属于, A 属于 B

这里我们准备3张表来理解他们的关系:
user_group 用户分组表:id、title
user 用户表:id、user_group_id、username、password
profile 用户信息表:id、user_id、nickname、sex

1、user表需要关联user_group表,表示每一个 用户 需要知道该用户是 哪个用户分组的;
2、profile表 需要关联 用户表,表示该用户信息数据 是哪个用户的信息;

我们知道一个用户组下面可以有很多用户,所以:user_group hasMany user;
一个用户 属于 一个用户组,所以:user belongsTo user_group;

同样是user_group和user表,但我们出发点不同,关系也就不一样了。

每个用户都应该有唯一一条用户信息数据,所以:user hasOne profile;
一条用户信息 属于 一个用户,所以:profile belongsTo user

综上:

在User模型中,我们可以定义关联:

function user_group(){return $this->belongsTo('UserGroup');
}
function profile(){return $this->hasOne('Profile');
}

我们在查询中:

user=model(‘User′)−>find();user=model(‘User′)−>find();user = user−>usergroup;//这样user中就可以包含当前数据对应的usergrou数据了user−>usergroup;//这样user中就可以包含当前数据对应的usergrou数据了user = $user->profile;//这样user中就可以包含当前数据对应的profile数据了

在UserGroup模型中,我们可以定义关联:

function user(){return $this->hasMany('User');
}

在Profile模型中,我们可以定义关联:

function user(){return $this->belongsTo('User');
}

注:定义关联function的方法名可以随意定义,一般为表名或模型名;我们定义的时候是function,但获取时理解为获取属性,所以不加();
很多人理解是我定义了一个profile的方法,所以应该$user->profile(),这里要特别注意下。

这样我们在查询时,就方便了,不需要使用大量的join。

在某一个model class里面,class_name所对应的表为主表(父),
关系函数方法里面的第一个参数所对应的表为从属表(子),
即为与主表相关联的表。

$hasOne

1、外键保存在关联表中;
2、保存时自动更新关联表的记录;
3、删除主表记录时自动删除关联记录。

$belongsTo

1、外键放置在主表中;
2、保存时不会自动更新关联表的记录;
3、删除时也不会更新关联表的记录。

<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;class ProformaInvoice extends Model
{use InsertCreator,InsertUpdator, BasicPaginate,Sort, SoftDeletes, PermissionFilter;protected $table = 'proforma_invoice';//表中的这些字段是可以赋值的protected $fillable = ['code','sales_order_id','invoice_no','date','seller_id','buyer_id','port_id','updator_id','updated_at'''''''];const STATUS_SAVED    = 1;  //保存const STATUS_AUDITED  = 2; //审核const STATUS_DISABLED = 3; //废弃static $field =['id', 'benebank', 'buyer_name', 'seller_company', 'sales_order_id'];protected $hidden = ['creator_id', 'deleted_at'];public function getId(){return $this->id;}public function seller(){return $this->belongsTo(CompanyAccount::class,'seller_id');//seller_id为在主表中(即ProformaInvoice)的外键}}

//同样的反写道理也是一样的

namespace App\Model;
use Illuminate\Database\Eloquent\Model;class CompanyAccount extends Model
{......public function Proforma(){return $this->hasOne(ProformaInvoice::class,'Proforma_id','id');//Proforma为在关联表表中(即ProformaInvoice)的外键,id为主表(CompanyAccount)的主键;综合起来的意思就是主表中的id与从表中的Proforma_id关联匹配获取从表ProformaInvoice表中的查询数据}
}

————————————————
原文链接:https://blog.csdn.net/li_haijiang/article/details/80523304
https://blog.csdn.net/living_ren/article/details/81208479

Laravel 模型hasOne、hasMany、belongsTo详细举例说明相关推荐

  1. ThinkPHP5有关模型hasOne、hasMany、belongsTo详解

    hinkPHP5有关联模型的操作,但有部分初学者对数据表中常见的几种表与表的关系还存在着问题,所以使用不好关联查询. 这里将hasOne.hasMany.belongsTo进行一个详细举例说明. 首先 ...

  2. 【laravel5.4 + TP5.0】hasOne和belongsTo的区别

    1.从字面理解:假如A比B大,那么A hasOne B: B belongsTo A: 2.个人总结: 3.从代码角度: 主要是看你是在哪一个model(模型)中编写这个关联关系,父关联对象就是在父关 ...

  3. php一对一模型关联,通过实例学习Laravel模型中的一对一关联关系

    通过实例学习Laravel模型中的一对一关联关系 一.前言 Laravel遵循[约定优于配置]的原则.PHP开发者只需要遵循Laravel框架的原则,就能减少大量的工作,这便是Laravel的魅力之一 ...

  4. R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵、并使用summary函数基于混淆矩阵输出分类模型评估的其它详细指标(kappa、npv等13个)

    R语言使用yardstick包的conf_mat函数计算多分类(Multiclass)模型的混淆矩阵(confusion matrix).并使用summary函数基于混淆矩阵输出分类模型评估的其它详细 ...

  5. php三表关联,详解Yii2 hasOne(), hasMany()实现三表关联的两种方法

    这篇文章主要介绍了Yii2 hasOne(), hasMany() 实现三表关联的方法(两种),非常不错,具有参考借鉴价值,需要的朋友可以参考下 背景: 现有 group (组)和 user (用户) ...

  6. php 数据透视表,php – 使用Laravel模型过滤数据透视表数据

    假设我有三个表(这只是一个例子): users user_id username roles role_id name user_roles user_id role_id primary (bool ...

  7. 语句作用_3分钟短文:Laravel模型作用域,为你“节省”更多代码

    引言 原则上代码写一次,处处是引用,不需要大量的冗余代码,这是一种趋势,也是提高代码健壮性的努力方向. laravel模型为我们提供了一层数据库操作层,将数据交互独立出来. 但是久而久之,随着项目的需 ...

  8. php 内链接实现三表,Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)

    背景: 现有 group (组)和 user (用户) 两种实例. 一个 group 中可以拥有多个 user,一个 user 也可以属于有多个 group (多对多关系) GroupUserRela ...

  9. ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略

    ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树&RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻 ...

最新文章

  1. 【HTML】处理<br>换行符追加到前端换行无效的问题 --- html中渲染的字符串中包含HTML标签无效的处理方法,字符串中包含HTML标签被转义的问题 解决
  2. 第三十三讲:tapestry表单组件详解之Label
  3. FT1248开发笔记
  4. 30岁以后的人生,如何来逆袭?
  5. 工作5年后才明白:不起眼的技能中,藏着你的未来
  6. Linux shell 上机编程-----习题
  7. iphone13 Pro的运行内存是6gb
  8. 《The Elder Scrolls V: Skyrim》百般冷门却强力职业
  9. BUUCTF:小易的U盘
  10. RESTE MASTER和reset slave
  11. win7连接sftp_WinSCP官方版下载_WinSCP(SFTP客户端) v5.17.1中文版 - Win7旗舰版
  12. 【C/C++服务器开发】socket网络编程函数接口详解
  13. 【记录】Nginx开源版安装与部署
  14. HTML页面之间传递Json格式数组的方式
  15. 单独使用Element图片预览功能
  16. 在BIOS中修改IMM的方法
  17. java 包命名_【Java】包的命名规则
  18. Facebook新财报:不惧“隐私门“事件影响,广告业务依然增长强劲
  19. 如何使用 Skopeo 做一个优雅的镜像搬运工
  20. 零基础学习java值得看的几本书

热门文章

  1. 如何训练Tesseract 4.0
  2. Vue事件修饰符的理解
  3. Python ElementTree 解析 xml文件
  4. android中slider控件,komi-slider
  5. react-native 调试工具 flipper watchman openssl 未安装(win)
  6. 本地安装MySQL数据库-8.0.29版本(踩坑版)
  7. 前端连接后端,获取到数据库数据,通过ECharts图标展现在页面上
  8. Android 启动优化总结
  9. 程序员你能发现自己的Bug吗?
  10. 使用Tesseract OCR引擎和层次聚集聚类(HAC)对多列数据进行OCR