Thinkphp模型關(guān)聯(lián)條件查詢

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容