thinkphp v5 视图查询

视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图

//查询cms_user和cms_user1两个表score字段相等的数据(视图查询默认inner join)
Db::view('user','id,user_name')->view('user1 u1','score,class','u1.score=user.score')->select()
//==>"SELECT `user`.`id`,`user`.`user_name`,`u1`.`score`,`u1`.`class` FROM `cms_user` `user` INNER JOIN `cms_user1` `u1` ON `u1`.`score`=`user`.`score`" 

注意,视图查询无需调用table和join方法,并且在调用where和order方法的时候只需要使用字段名而不需要加表名(如果两个表都有此字段的除外)。

默认使用INNER join查询,如果需要更改,可以使用:

//查询cms_user和cms_user1两个表score字段相等的数据(保留user表的所有数据)
Db::view('user','id,user_name')->view('user1 u1','score,class','u1.score=user.score','left')->select()
//==>"SELECT `user`.`id`,`user`.`user_name`,`u1`.`score`,`u1`.`class` FROM `cms_user` `user` LEFT JOIN `cms_user1` `u1` ON `u1`.`score`=`user`.`score`"

可以使用别名:

Db::view('think_user member',['id'=>'uid','name'=>'account'])
    ->view('Profile','truename,phone,email','Profile.user_id=member.id')
    ->view('Score','score','Score.user_id=Profile.id')
    ->where('score','>',80)
    ->select();

手册的['think_user'=>'member']设置别名有点问题,但是'think_user member'设置表的别名是没问题的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容