一、关联表查询的好处
二、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表的外键字段userid,user表所对应的模型,就应该使用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']}
和新增一样使用save
方法进行更新关联数据。
$user = User::get(1);
//方式一:
$user->login->ip= ‘222.186.58.28’;
$user->login->save();
如何成为Android高级架构师!
架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。
架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。
但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。
成为Android架构师必备知识技能
对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)
部分内容展示
《设计思想解读开源框架》
- 目录
- 热修复设计
- 插件化框架设计
《360°全方面性能优化》
- 设计思想与代码质量优化
- 程序性能优化
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
片转存中…(img-3bxRq9sN-1715430274188)] - 插件化框架设计
[外链图片转存中…(img-PWQHtNJI-1715430274189)]
《360°全方面性能优化》
[外链图片转存中…(img-ZwJqqYYX-1715430274190)] - 设计思想与代码质量优化
[外链图片转存中…(img-P10QkjUP-1715430274192)] - 程序性能优化
[外链图片转存中…(img-KYYvyulA-1715430274193)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!