thinkPhP6模型远程关联hasOneThrough

文章详细解释了如何在数据库模型中设置远程一对一关联,特别是在用户模型和档案卡模型之间,通过hasOneThrough方法进行双向关联。用户模型通过档案表关联到档案卡表,而档案卡模型也能反向关联到用户模型,只需调整hasOneThrough方法的参数顺序。在控制器中使用with查询来获取关联数据,而不是withJoin。
摘要由CSDN通过智能技术生成

官方文档的说明:
远程一对一关联用于定义有跨表的一对一关系,例如:

  • 每个用户有一个档案
  • 每个档案有一个档案卡
  • 用户和档案卡之间并无关联

 举例如下:
1、用户表user包含主键id,对应模型User
2、档案表profile包含user_id外键和id主键,该表关联user,对应模型Profile
3、档案卡表card,包含profile_id外键和id主键,该表用外键关联profile,对应模型Card

如果在用户模型关联档案卡,hasOneThrough('关联模型', '中间模型', '外键', '中间表关联键','当前模型主键','中间模型主键');
User模型创建如下关联定义:

public function card()
    {
        return $this->hasOneThrough(Card::class,Profile::class,'user_id','profile_id','id','id');
    }

我们可以把这当做正向的远程关联;假如反过来,我们想在档案卡模型card中关联user模型怎么写呢?官方没有这样的说明,但是经过实际测试用这个方法也可以实现反向远程一对一关联,只要调整参数顺序就行。
hasOneThrough('关联模型','中间模型','中间主键','关联主键','当前模型中对应中间表的外键','中间模型中对应关联表的外键 ')
在card模型这样定义关联:

public function user()
    {
        return $this->hasOneThrough(User::class,Profile::class,'id','id','profile_id','user_id');
    }

还要注意控制器中查询不能用withJoin应该用with查询。

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。 ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括: 采用容器统一管理对象 支持Facade 注解路由支持 路由跨域请求支持 配置和路由目录独立 取消系统常量 助手函数增强 类库别名机制 增加条件查询 改进查询机制 配置采用二级 依赖注入完善 支持PSR-3日志规范 中间件支持(V5.1.6+) Swoole/Workerman支持(V5.1.18+) ThinkPHP5的运行环境要求PHP5.6以上,兼容PHP8.0。 更新日志: V5.1.40 LTS(2020-10-09) 本版本为常规更新,主要包括: 改进redis驱动`has`方法 修正XA事务 修正`HasManyThrough`关联 增加mysql json类型字段->>方式获取支持 改进路由加载 避免加载编辑器临时文件影响 修复关联模型的属性直接附加到当前模型,当关联模型字段名为name时获取的值为模型的属性name值 修复多态关联预加载`field`无效 改进Collection类的`column`方法的PHP兼容性问题 改进mysql驱动 改进`parseclosure`方法 SoftDelete删除条件做空判断 改进验证类`append`方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

djlhf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值