Thinkphp常常需要關聯操作,數據庫中需要用到join連接查詢,根據對方的條件進行關聯條件查詢(同時獲得兩個表的數據)
這里有兩個表:article(文章表)、comment(評論表):
模型:
//評論表 class Comment extends Model { public function article() { //不設置bind的全部顯示 return $this->belongsTo(Article::class)->bind([ "article_title"=>"title" ]); } }
方法一:hasWhere關聯條件查詢:
public function 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(); }
注意:hasWhere在with前面
sql語法:
SELECT * FROM `comment` `Comment` INNER JOIN `article` `Article` ON `Comment`.`article_id`=`Article`.`id`
WHERE `Article`.`title` LIKE '%美國%'
方法二:withJoin關聯條件查詢:
public function demo5(){ $comm = Comment::withJoin("article")->where("article.title","like","%美%")->select()->toArray(); }
sql語法:
SELECT * FROM `comment` `comment` INNER JOIN `article` `article` ON `comment`.`article_id`=`article`.`id`
WHERE `article`.`title` LIKE '%美%'
方法三:Join直接使用:
public function 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