Thinkphp常常需要關(guān)聯(lián)操作,數(shù)據(jù)庫中需要用到j(luò)oin連接查詢,根據(jù)對方的條件進(jìn)行關(guān)聯(lián)條件查詢(同時(shí)獲得兩個(gè)表的數(shù)據(jù))
這里有兩個(gè)表:article(文章表)、comment(評論表):


//評論表classCommentextends Model
{
? ? publicfunction article() {
? ? ? ? //不設(shè)置bind的全部顯示return$this->belongsTo(Article::class)->bind([
? ? ? ? ? ? "article_title"=>"title"? ? ? ? ]);
? ? }
}
方法一:hasWhere關(guān)聯(lián)條件查詢:
publicfunction demo5(){
? ? ? ? //使用hasWhere根據(jù)article的條件查詢(注:comment與article有關(guān)聯(lián)),同時(shí)使用with把a(bǔ)rticle查詢出來:$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關(guān)聯(lián)條件查詢:
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個(gè)參數(shù)模型關(guān)聯(lián)方法名,和模型名稱(article)一樣,否則報(bào)錯
2、withJoin第1個(gè)參數(shù)模型關(guān)聯(lián)方法名,要和模型名稱(article)一樣,否則報(bào)錯
3、withJoin和haswhere默認(rèn)是inner join