tp5中使用db进行多表联合查询的方法

来源:赵克立 分类: PHP 标签:PHP函数ThinkphpSQL发布时间:2016-12-16 11:03:05浏览:761
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-12-16 11:13:45

在使用thinkphp5的时候因为数据库中创建啦一些 qz_order_detail等多个下划线的表名字而使用的时候又不想直接写前缀,为啦方便以后修改数据库表前缀的时候方便,导致啦很多想不到的错误

下面是对tp5中数据库的视图查询的一个说明

官方的数据表和字段命名规范

数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如think_user表和user_name字段,不建议使用驼峰和中文作为数据表字段命名。并没有说明类似这种表名字怎么办 qz_order_detail进行数据库查询的时候 默认的qz_user 这种名字直接按官方文档的操作进行查询就可以啦

如:

\think\Db::table('qz_user')->select();//带前缀的
\think\Db::name('User')->select();//不带前缀的
\think\Db::name('OrderDetail')->select();//不带前缀的

下面来说明下进行视图查询的时候 qz_order_detail 这种表的使用方法 

先创建两个数据表

qz_order_detailqz_goods两个表结构如下主键分别是order_detail_idgoods_id

blob.png

blob.png

order_detail_id中查询信息并且通过goods_id把所关联的产品信息带出来

$data = \think\Db::view('OrderDetail', '*')
	->view('Goods', 'title,pic', 'OrderDetail.goods_id=Goods.goods_id')
	->where(['OrderDetail.order_id' => $order_id])
	->select();

生成的sql语句是

SELECT `OrderDetail`.*,`Goods`.`title`,`Goods`.`pic` FROM `qz_order_detail` `OrderDetail` INNER JOIN `qz_goods` `Goods` ON `OrderDetail`.`goods_id`=`Goods`.`goods_id` WHERE `OrderDetail`.`order_id` = 11

可以看出数据库命名用小写下划线,查询数据使用的时候数据库表名字使用骆驼命名法传表名名就可以


微信号:kelicom QQ交流群:215861553
点击更换验证码
留言