thinkphp5在Model模型里使用hasOne和belongto关联表查询

一、关联表查询的好处

二、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表 字段idname 
login表 字段idipuserid

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();

如何成为Android高级架构师!

架构师必须具备抽象思维和分析的能力,这是你进行系统分析和系统分解的基本素质。只有具备这样的能力,架构师才能看清系统的整体,掌控全局,这也是架构师大局观的形成基础。 你如何具备这种能力呢?一是来自于经验,二是来自于学习。

架构师不仅要具备在问题领域上的经验,也需要具备在软件工程领域内的经验。也就是说,架构师必须能够准确得理解需求,然后用软件工程的思想,把需求转化和分解成可用计算机语言实现的程度。经验的积累是需要一个时间过程的,这个过程谁也帮不了你,是需要你去经历的。

但是,如果你有意识地去培养,不断吸取前人的经验的话,还是可以缩短这个周期的。这也是我整理架构师进阶此系列的始动力之一。


成为Android架构师必备知识技能

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

部分内容展示

《设计思想解读开源框架》

  • 目录
  • 热修复设计
  • 插件化框架设计

    《360°全方面性能优化》
  • 设计思想与代码质量优化
  • 程序性能优化

    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
    片转存中…(img-BXIKIlh5-1715752638207)]
  • 插件化框架设计
    [外链图片转存中…(img-dUijnnvY-1715752638208)]
    《360°全方面性能优化》
    [外链图片转存中…(img-IiPLF8im-1715752638209)]
  • 设计思想与代码质量优化
    [外链图片转存中…(img-G6E5mCtX-1715752638210)]
  • 程序性能优化
    [外链图片转存中…(img-vTd7TLpH-1715752638211)]
    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值