ThinkPHP 的join关联查询不使用默认的表前缀
关于ThinkPHP 的关联查询 , 官方文档是这样描述的:
文章插图
ThinkPHP 关联查询
上述join函数中需要三个参数 , 分别是:
join
要关联的(完整)表名以及别名 , 支持三种写法:
- 写法1:[ '完整表名或者子查询'=>'别名' ]
- 写法2:'完整表名 别名'
- 写法3:'不带数据表前缀的表名'
关联条件 , 可以为字符串或数组 ,为数组时每一个元素都是一个关联条件 。
type
关联类型 , 可以为: INNER、LEFT、RIGHT、FULL , 不区分大小写 , 默认为INNER 。
关联不同前缀的表一般情况下 , 都是一个数据库中查询的 , 这样的情况下默认使用的都是相同的表前缀 , 比如(shop_) , 所以在使用数据库模型关联查询时往往都是这样写的:
Order::alias('o') ->join('user u', 'o.user_id = u.id') ->select();
在以上代码中 , 因为是使用模型查询 , 所以默认都会加上表前缀 , 两张表的完整表名就是shop_order和shop_user , 而关联类型则默认为INNER关联 。但这时如果关联了一张不同前缀的表(比如:pay_record) , 上述的查询语句显然就行不通了 , 这时就需要在关联语句处稍作修改 , 修改后的代码如下:
Order::alias('o') ->join(['pay_record' => 'r'], 'o.pay_id = r.id') ->select();
这样便能使用模型关联不同前缀的表进行查询了 。总结【ThinkPHP 的join关联查询不使用默认的表前缀】上述的方式其实也就是把join函数中的join参数由字符串修改为数组;ThinkPHP是一个很优秀的开发框架 , 上述的关联方式也只是其中一种 , 更多方式可以查阅官方手册 。
- 小米科技|性价比拉满!TCL T8E-PRO QLED智屏当属潮玩世代的必备单品
- 华为鸿蒙系统|华为汽车战略布局,进入汽车行业的底气来自哪里?(车车佳)
- 浙江省|浙江的五大富豪,四位做过中国首富,仅马云的阿里就1年纳税366亿
- iOS|恒创科技:Linux日本云服务器安全设置的基本步骤
- javascript|手机移动端的PyTorch来了,还支持JavaScript
- 中关村|柳传志在这里被骗、掘金,书写半部科技史的中关村经历了什么?
- 手机维修|手机维修的猫腻‖你是不是上当了?
- 智能化|感知局限下,车路协同的“子弹”还得再飞会儿
- 华为鸿蒙系统|都2021年底了,为何Mate40Pro还是目前公认最好用的“安卓”手机
- saas|上半年的Redmi K40 Pro,现在入手2500元不到,还等?