Thinkphp模型关联条件查询

Thinkphp常常需要关联操作,数据库中需要用到join连接查询,根据对方的条件进行关联条件查询(同时获得两个表的数据

这里有两个表:article(文章表)、comment(评论表):


//评论表classCommentextends Model

{

    publicfunction article() {

        //不设置bind的全部显示return$this->belongsTo(Article::class)->bind([

            "article_title"=>"title"        ]);

    }

}

方法一:hasWhere关联条件查询:

publicfunction demo5(){

        //使用hasWhere根据article的条件查询(注:comment与article有关联),同时使用with把article查询出来:$list= Comment::hasWhere('article',[["title","like","%美国%"]])->with("article")->select()->toArray();

     //或者,效果一样$list= Comment::with(['article'=>function($query){

            $query->where("title","like","%量子%");

        }])->select();

    }

sql语法:

SELECT*FROM`comment` `Comment`INNERJOIN`article` `Article`ON`Comment`.`article_id`=`Article`.`id`

WHERE`Article`.`title`LIKE'%美国%'

方法二:withJoin关联条件查询:

publicfunction demo5(){

        $comm= Comment::withJoin("article")->where("article.title","like","%美%")->select()->toArray();

    }

sql语法:

SELECT*FROM`comment` `comment`INNERJOIN`article` `article`ON`comment`.`article_id`=`article`.`id`

WHERE`article`.`title`LIKE'%美%'

方法三:Join直接使用:

publicfunction demo5(){

        $comm = Db::name("Comment")

            ->alias("c")

            ->join("article a","a.id= c.article_id")

            ->where("a.title","like","%量子%")

            ->select()

            ->toArray();

    }

注:1、haswhere的第1个参数模型关联方法名,和模型名称(article)一样,否则报错

  2、withJoin第1个参数模型关联方法名,要和模型名称(article)一样,否则报错

3、withJoin和haswhere默认是inner join

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