thinkphp5在Model模型里使用hasOne和belongto关联表查询-程序员宅基地

技术标签: 程序员  microsoft  数据库  

一、关联表查询的好处

二、thinkPHP5中hasOne和belongto区别

三、关联表结构

四、Model模型定义关联

五、关联查询

六、关联新增

七、关联更新

八、绑定属性到父模型

九、关联自动写入


一、关联表查询的好处

一对一”,“一对多”,“多对多”都属于关联表查询范畴,关联表查询可以简化sql语句,只需发出一条sql语句,这极大地减少了程序与数据库的io交互,提高了性能。本文主要介绍thinkphp5.0框架的一对一关联表查询的使用方法!

大家可以直接参考官方文档:https://www.kancloud.cn/manual/thinkphp5/142357

二、thinkPHP5中hasOne和belongto区别

hasOne和belongsTo这两种方法都可以应用在一对一关联上,但是两者也是有区别的:

最主要的区别就在于:谁是主,谁是

hasOne(‘关联模型名’,‘外键名’,‘主键名’,[‘模型别名定义’],‘join类型’);

belongsTo(‘关联模型名’,‘外键名’,‘关联表主键名’,[‘模型别名定义’],‘join类型’);

比如有user(用户表)和login(登录日志表)两张表,一对一的关系,表设计大概如下:

user表 字段 id name  
login表 字段 id ip userid

login表有user表的外键字段useriduser表所对应的模型,就应该使用hasOne去关联login表, login表就是从属于user表;反之,login表所对应的模型,则用belongsTo去关联user表 ,user为主,里面有一个login。

说明:hasOne和belongsTo可以同时使用,也可以单独只使用一个。

三、关联表结构

四、Model模型定义关联

默认情况下,Thinkphp5.0使用的是user_id 作为外键关联,如果不是的话则需要在关联定义的时候指定,例如:

user表对应的的Model模型:User

<?php namespace app\common\model; use think\Model; use think\Db; class User extends Model{ public function login() { //1.hasOne 一对一 //2.hasMany 一对多 //hasOne('关联模型名','外键名','主键名',['模型别名定义'],'join类型'); return $this->hasOne('UserLogin', 'uid','id'); } } ?>

user_login表对应的Model模型:UserLogin

<?php namespace app\common\model; use think\Model; use think\Db; class UserLogin extends Model{ public function user() { //belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型'); //默认的关联外键是user_id,如果不是,需要在第二个参数定义 return $this->belongsTo('User','uid','id'); } } ?>

五、关联查询

1、后端

<?php namespace app\index\controller; use think\Controller; use think\Session; use app\common\model\User as UserModel; class Base extends Controller { $uid = session('userid'); $user = UserModel::get($uid); // 输出Login关联模型的ip属性 echo $user->login->ip; } 2、前端(view模板)

商户账号:{$user['username']}

登录地区:{$user.login.ip|default=''}

上次登录:{$user['lastdate']}

3、如果要根据关联表的查询条件查询当前模型的数据,可以使用`hasWhere`方法,例如: $user = UserModel::hasWhere('login',['ip'=>'192.168.1.1'])->find(); echo $user->name; ### 六、关联新增 $user = User::get(1); // 如果还没有关联数据 则进行新增 $user->login()->save(['ip' => '192.168.1.1']); 系统会自动把当前模型的主键传入Userogin模型。 ### 七、关联更新 1、关联更新需要定义相对的关联,我们可以在UserLogin模型中定义一个相对的关联关系,例如: <?php namespace app\common\model; use think\Model; use think\Db; class UserLogin extends Model{ public function user() { //belongsTo('关联模型名','外键名','关联表主键名',['模型别名定义'],'join类型'); return $this->belongsTo('User','uid','id'); } } ?>

和新增一样使用save方法进行更新关联数据。

$user = User::get(1);

//方式一:

$user->login->ip= ‘222.186.58.28’;

$user->login->save();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

最后

针对于上面的问题,我总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

[外链图片转存中…(img-sWYnPCCN-1713412135753)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2401_84132628/article/details/137915096

智能推荐

[SDOI2010]所驼门王的宝藏-程序员宅基地

文章浏览阅读34次。https://www.zybuluo.com/ysner/note/1250991题面有一个\(n*m\)的网格图,其中有\(tot\)个有门+宝藏的网格。这些门可以传送,且分为三类:门一:可到同行的任意一格门二:可到同列的任意一格门三:可到相邻的八格。从任意点出发和终止,最多能经过多少有宝藏的网格。\(tot\leq10^5,n,m\leq10^6\)解析首先...

matlab中hist bar_matlab hist bar-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏4次。1.n=hist(Y);默认十个等间隔区间,并返回每个范围内的Y的元素个数作为一行向量,如下图:bar(n) bar函数是用来画直方图的。2.n=hist(Y,X);X是一个事先给定的区间划分,统计Y在X这个区间划分下的个数,如下图bar(x,n) 是在x和n对应3.n=hist(Y,nbins);nbins是间隔数,也就是说我们应该统计多少个间隔,这里设nbins=20,..._matlab hist bar

解决arm启动过程中设置ulimit -c unlimited 不生效的方法_ulimit -c unlimited不生效-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏11次。对于嵌入式Linux工程师来说,在工作中经常遇到段错误,而其中调试段错误的最好方式就是core_dump调试。core_dump调试要满足几个条件:1、ulimit -c unlimited,取消core file的大小限制;2、echo /proc/sys/kernel/core_pattern >mydir,设置生成core的目录;3、代码中取消singal相关的信号注册函数,但是很多段错误是发生在设备启动的过程中,所以这时候就需要在相关的脚本中设置在几个命令,由于环境变量的关系发现_ulimit -c unlimited不生效

动力节点数据结构课堂笔记 2021.11.23-11.29-程序员宅基地

文章浏览阅读251次。1、数据结构的分类:链表,数组,二叉树,图,栈,队列线性结构:有序数据元素,线性表,数组,栈,队列,链表非线性结构:树,图,二维数组2、栈的特点,先进后出,只允许在栈顶进行插入(push)和删除(pop)操作队列的特点,先进后出单向链表和双向链表,单向链表每一个节点都包含自身的数值和下一个内存地址双向链表每一个节点,包含有自身的数值,上一个连接的地址,下一个连接的地址3、排序算法:插入排序,选择排序,希尔排序,归并排序,基数排序,快速排序,冒泡排序基数排序:按照位数来进行排序,从个位开始排序_动力节点

bode函数_利用maltab的system identification获取系统的传递函数加速你的环路设计-程序员宅基地

文章浏览阅读714次。前言:昨天晚上发了一篇用手动添加零极点来模拟系统传递函数的文章,今天跟大神请教了一番,利用system identification来识别bode图,可以获得更加精确的模型,从而以更准确更迅速的来实现环路设计,这里要感谢王磊大大,感谢您的帮助。实现方法:利用仿真软件获得系统从控制到输出的bode图数据,然后将数据导入到system identification,使用波形分析功能来..._matlab system identification分析波特图

CAD标注样式快捷键是什么?_cad标注样式设置-程序员宅基地

文章浏览阅读2.6k次。文字字体可以设为宋体,罗马体等,文字颜色设为物色,填充颜色为无,最后我们再设置文字高度为0.45,设置文字位置为垂直居中,水平居中。我们将第一个箭头,第二个箭头均设置为实心闭合,然后将引线也设置为实心闭合,然后将箭头大小设置为0.3即可。2、找到上方的标注,然后把光标移动至标注样式图标上即可出现标注样式,我们点击进入,就可以看到之前设计好的多种标注样式。5、首先对线的样式进行调整,包括线的颜色、线型,线宽,超出标记,极限间距等参数,我们将其设置为自己需要的参数即可。8、接下来,我们设置主单位。_cad标注样式设置

随便推点

Python数据分析之pandas库的使用详解_python中pandas库详解-程序员宅基地

文章浏览阅读1.8k次,点赞9次,收藏44次。本篇文章目录一、前言二、什么是pandas三、pandas安装四、pandas的常用数据类型4.1 series:表示一维,带标签数组,一行或一列4.1.1创建series4.1.2 打印索引值4.1.3 打印数据值4.1.3 创建一个具有标签索引的series4.1.4 使用python字典创建series4.1.5 根据索引值查询数据4.2 DataFrame:表示二维,多行多列五、数据的读取......_python中pandas库详解

android监听短信发送和接收_android 监听短信-程序员宅基地

文章浏览阅读1.8k次。这一段内容如果要使用广播就加service。_android 监听短信

基于springboot+Mybatis的学生成绩管理系统_springboot学生成绩管理系统-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏31次。基于springboot+mybatis的学生成绩管理系统_springboot学生成绩管理系统

SpringBoot+Vue3项目跨域配置及Set-Cookie:SameSite=Lax 问题_spring boot 跨域 去除自动返回samesite=lax-程序员宅基地

文章浏览阅读417次,点赞3次,收藏11次。Set-Cookie:SameSite=Lax 问题,跨域配置_spring boot 跨域 去除自动返回samesite=lax

大数据毕设选题 - 疫情实时数据分析可视化(Flask python)_pathon数据可视化作品选题-程序员宅基地

文章浏览阅读3.3k次。 Hi,大家好,这里是丹成学长的毕设系列文章! 对毕设有任何疑问都可以问学长哦!这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是大数据-实时疫情数据可视化项目学长这里给一个题目综合评分(每项满分5分)难度系数:4分工作量:4分创新点:3分。_pathon数据可视化作品选题

美团面试—手撕numpy之fps点云最远点采样实现_python 最远点采样-程序员宅基地

文章浏览阅读5.2k次。FPS没有想到不按套路出牌的美团今早就撕了这个。点云最远点采样,从一堆点集中选出一些点,使得他们尽可能地远离。这样采样出来的点能比较好的表征整个轮廓。在pointnet++中就用到过。整体思路是:分别维护一个已选取和待选取的点云集合。先从点云集合中选出一个点,然后计算其余所有点到该点的距离,距离最大的那个点是下次要加入的点。当pick集合中有多个点时,距离的定义为到集合每个点距离中的最小距离。关于距离的计算:维护一个distance列表,对于每次pick出来的点,去更新distance。可以利用_python 最远点采样

推荐文章

热门文章

相关标签