Thinkphp常常需要關(guān)聯(lián)操作忆矛,數(shù)據(jù)庫中需要用到j(luò)oin連接查詢趣苏,根據(jù)對方的條件進(jìn)行關(guān)聯(lián)條件查詢(同時獲得兩個表的數(shù)據(jù))
這里有兩個表: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)),同時使用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關(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個參數(shù)模型關(guān)聯(lián)方法名愧沟,和模型名稱(article)一樣,否則報錯
2鲤遥、withJoin第1個參數(shù)模型關(guān)聯(lián)方法名沐寺,要和模型名稱(article)一樣,否則報錯
3盖奈、withJoin和haswhere默認(rèn)是inner join