视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图
//查询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'设置表的别名是没问题的。