Thinkphp模型關聯條件查詢


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM