推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

ThinkPHP 的join关联查询不使用默认的表前缀

   2023-06-26 网络整理佚名1500
核心提示:在以上代码中,因为是使用模型查询,所以默认都会加上表前缀,两张表的完整表名就是和,而关联类型则默认为INNER关联。但这时如果关联了一张不同前缀的表(比如:),上述的查询语句显然就行不通了,这时就需要在关联语句处稍作修改,修改后的代码如下:这样便能使用模型关联不同前缀的表进行查询了。

关于关联查询,官方文档是这样描述的:

关联查询

上面的join函数需要三个参数,分别是:

加入

关联的(完整)表名和别名支持三种写法:

写法一:['全表名或子查询'=>'别名'] 写法二:'完整表名别名' 写法三:'不带数据表前缀的表名'

关联条件,可以是字符串,也可以是数组,每个元素为数组时就是一个关联条件。

类型

关联类型,可以是:INNER、LEFT、RIGHT、FULL,不区分大小写,默认为 INNER。

将具有不同前缀的表关联起来

一般来说,都是在数据库中查询。 这种情况下,默认使用相同的表前缀,如(shop_),所以在使用数据库模型关联查询时,往往会这样写:

Order::alias('o') ->join('user u', 'o.user_id = u.id') ->select(); 

上面代码中,因为使用了模型查询,所以默认添加表前缀,两个表的全表名是and,关联类型默认为INNER关联。

但此时如果关联的是不同前缀的表(例如: ),上面的查询语句显然就不行了。 在这种情况下,需要对相关语句进行轻微修改。 修改后的代码如下:

Order::alias('o') ->join(['pay_record' => 'r'], 'o.pay_id = r.id') ->select(); 

这样就可以利用该模型关联不同前缀的表进行查询。

总结

上面的方法实际上是将join函数中的join参数从字符串改为数组; 它是一个优秀的开发框架,上面的连接方式只是其中一种。 更多方法请参考官方手册。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON