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'设置表的别名是没问题的。

你可能感兴趣的:(thinkphp v5 视图查询)