• 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

  • 相关阅读:
    DirectX9:基础篇 第五章 绘制流水线
    他山之石:可以攻玉
    C89:论内存分配问题
    C89:关键字
    MFC:开头篇 介绍
    DirectX9:先导篇 数学基础
    模仿轮播图效果
    text选中后displa出label内容
    ASP.NET页面之间传递值的几种方式
    jquery-delay(),queue()
  • 原文地址:https://www.cnblogs.com/bushui/p/13576165.html
Copyright © 2020-2023  润新知