hinkPHP5有关联模型的操作,但有部分初学者对数据表中常见的几种表与表的关系还存在着问题,所以使用不好关联查询。

这里将hasOne、hasMany、belongsTo进行一个详细举例说明。

首先,这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 = $user->user_group; //这样user中就可以包含当前数据对应的user_grou数据了
$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。

转自:https://www.thinkphp.cn/extend/1056.html?__cf_chl_jschl_tk__=34fe3145b6ac2f27d039e58e43f98921dcd35d39-1613959542-0-AR2SNltufFsyTWfGswLUZeDXeHcG-XD_cprzDR7uyU95dnIZBvKd-0UTEPpVFRIiKDKvv4qSvf6sNA-JvBoyOc2H5kOGpLj0GJDcm_plNLuc_sDJJrOcRWBLqqGRQO2xE7WClKiU3G2xM4eS0VMo39wq56tKKWE5RYh7M0-8jTPyfDVgjO4eHB_GFrx9mra6r0C2VyGmC1kBqjb5Z_uk-wLmqzCZ9pTsYdv5FD96xBQ_2WA9fuChtEU8Tj2-zzpghWBWMYc-VQAZ-XH0baiXYrQUlyMU6W2PADzftHVNStmBl2g5R9z6x3_ZNQjlsypZF_kQzgEaSdtBZajjGIUJw-8

ThinkPHP5有关模型hasOne、hasMany、belongsTo详解相关推荐

  1. Java内存模型(JMM)详解-可见性volatile

    这里写自定义目录标题 Java内存模型(JMM)详解-可见性 什么是JMM JMM存在的意义 为什么示例demo中不会打印 i 的值 如何解决可见性问题 **深入理解JMM内存模型** JAVA内存模 ...

  2. 从零开始学前端 - 7. CSS盒模型 margin和padding详解

    作者: 她不美却常驻我心 博客地址: https://blog.csdn.net/qq_39506551 微信公众号:老王的前端分享 每篇文章纯属个人经验观点,如有错误疏漏欢迎指正.转载请附带作者信息 ...

  3. 隐马尔可夫模型之Baum-Welch算法详解

    隐马尔可夫模型之Baum-Welch算法详解 前言 在上篇博文中,我们学习了隐马尔可夫模型的概率计算问题和预测问题,但正当要准备理解学习问题时,发现学习问题中需要EM算法的相关知识,因此,上一周转而学 ...

  4. 一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现

    一文读懂NLP之隐马尔科夫模型(HMM)详解加python实现 1 隐马尔科夫模型 1.1 HMM解决的问题 1.2 HMM模型的定义 1.2.1HMM的两个假设 1.2.2 HMM模型 1.3 HM ...

  5. 数据库系统模式(schema)和模型(model)详解

     数据库系统模式(schema)和模型(model)详解 数据(data)是描述事物的符号记录. 模型(Model)是现实世界的抽象. 数据模型(Data Model)是数据特征的抽象,是数据库管 ...

  6. 机器学习——时间序列ARIMA模型(一):差分法详解

    机器学习--时间序列ARIMA模型(一):差分法详解 一.所需数据的性质 平稳性 样本数据需随着时间序列而发生变化,且序列的均值和方差不发生明显变化. 预测出在未来的一段期间内数据顺着现有的" ...

  7. Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev

    一.例程简介 该例程比较有代表性,属于Halcon里的分类方法之一,直接调用Halcon封装好的GMM分类器(高斯混合模型)对橘子和柠檬进行分类.GMM属于概率分类方法,属于P(Y|X),通过对样本的 ...

  8. 强的离谱, Transformer 模型与联邦机器学习详解!

    Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...

  9. BilSTM 实体识别_NLP-入门实体命名识别(NER)+Bilstm-CRF模型原理Pytorch代码详解——最全攻略

    最近在系统地接触学习NER,但是发现这方面的小帖子还比较零散.所以我把学习的记录放出来给大家作参考,其中汇聚了很多其他博主的知识,在本文中也放出了他们的原链.希望能够以这篇文章为载体,帮助其他跟我一样 ...

  10. BilSTM 实体识别_NLP入门实体命名识别(NER)+BilstmCRF模型原理Pytorch代码详解——最全攻略...

    来自 | 知乎   作者 | seven链接 | https://zhuanlan.zhihu.com/p/79552594编辑 | 机器学习算法与自然语言处理公众号本文仅作学术分享,如有侵权,请联系 ...

最新文章

  1. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)
  2. ubuntu 20.04修改数据源配置
  3. 制作模块-安装模块压缩包
  4. Android之解决java.lang.NoSuchMethodError:android.os.powerManager.isInteractive问题
  5. java怎么把system.out的东西输出到文件上
  6. 数字图像处理图像反转的实现_使用8086微处理器反转16位数字
  7. 销户c语言,c – 如何在注销时优雅地退出QApplication?
  8. 二维随机变量期望公式_概率论笔记-Ch4期望与方差
  9. 事务注解放到类上面 下面私有方法有效吗_【面试】足够应付面试的Spring事务源码阅读梳理(建议珍藏)...
  10. react动态改变选中不选中_reactjs – 如何避免使用重新选择来计算派生状态时React重新渲染...
  11. 机器学习、深度学习资料推荐
  12. 计算机课用英语怎么说cute,cute英语怎么读
  13. TIMESTEN安装配置指南-中文版
  14. 步进电机和伺服电机的区别
  15. Excel导入txt数据乱码
  16. HW-LCD-070 7寸液晶屏 数据手册
  17. python爬虫+网页点击事件+selenium模拟浏览器,爬取选股宝内容
  18. 搭建帮助中心无方法,Baklib帮你轻松解决
  19. Word交叉引用怎么才能只引用编号项
  20. Unity 的协程的原理

热门文章

  1. 检索数据_17_按照指定的次序返回查询结果
  2. Kettle使用_9 存储过程与设置变量
  3. 含金量高的计算机大赛,高含金量计算机竞赛盘点!
  4. oracle分片键,数据库SQL语句及性能优化
  5. OpenCV学习笔记之扫描图像
  6. windows下训练FCN模型所遇到的问题
  7. 为什么我们从Angular 2迁移到Vue.js(为什么我们没有选择React)
  8. Code for City 黑客松 | 成都站启动
  9. 5G频谱相争“兵戎相见”各相部署风起云涌
  10. int*与(int*)的差别