美文网首页
thinkphp v5 视图查询

thinkphp v5 视图查询

作者: 呦丶耍脾气 | 来源:发表于2017-09-21 15:23 被阅读44次

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

    //查询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 视图查询

          本文链接:https://www.haomeiwen.com/subject/xkgzsxtx.html