首页 > 其他分享 >tp6的with关联使用(删查)

tp6的with关联使用(删查)

时间:2023-05-26 21:34:22浏览次数:53  
标签:comment 删查 class 关联 tp6 Article article public

1、with的使用

Thinkphp可以进行关联操作,数据库中需要用到join连接查询时候,用thinkPHP框架的关联查询可以有效的提高查询效率,下面是常用的关联:

  1. hasOne:有一个,A 有一个 B(一对一关联)
  2. hasMany:有很多,A 有很多 B(一对多关联)
  3. belongsTo: 多个(或一个)A 属于 B(属于,相当与多对一)
  4. belongsToMany:多对多关联
    这里有两个表:comment(评论表)、article(文章表)
create table `comment` (
    `id` int primary key AUTO_INCREMENT comment "ID",
    `title` varchar(255) comment '标题',
    `content` text  comment '内容',
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

create table `article` (
    `id` int primary key AUTO_INCREMENT comment "ID",
    `msg` varchar(255) comment '评论内容',
    `article_id` int(10) comment '文章ID',
   `art_sum` int(10)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

关联查询

comment的模型使用belongsTo()方法关联article表:

//评论表
class Comment extends Model
{
    public function comm() {
        // Article::class关联的表,article_title自定义字段,title显示的字段
        return $this->belongsTo(Article::class)->bind([
            "article_title"=>"title"
        ]);

        //不设置bind的全部显示
//        return $this->belongsTo(Article::class);
    }
}

控制层使用with:

public function demo2(){
   $items = Comment::with(["comm"])->select()->toArray();
    echo "<pre>";
    print_r($items);
}

关联删除

hasMany,一对多

article模型关联comment:

class Article extends Model
{
    //belongsTo是多对一,不适合使用
//    public function comment() {
//        return $this->belongsTo(Comment::class);
//    }

    public function comment() {
        return $this->hasMany(Comment::class,"article_id");
    }
}

together关联删除:

//关联删除
public function demo3(){
    $list = Article::with('comment')->find(1);
    $list->together(["comment"])->delete();
}

除了关联删除和关联查询,还有withCount(关联数量统计的个数):

    //关联查询的数量
    public function demo2(){
        // self::withCount('关联方法名')->select();
        // self::withCount(['关联方法名' => '自定义属性名'])->select();
        $list = Article::withCount('comment')->select();
        foreach($list as $user){
            // 获取文章关联的评论关联个数
            echo $user->comment_count;
            echo "<br>";
        }
    }

withSum(关联数量的相加的结果):

    //关联查询的统计
    public function demo4(){
        //comment的art_sum指定关联统计的字段
        $list = Article::withSum('comment',"art_sum")->select();
        foreach($list as $user){
            // 获取文章关联的评论的art_sum相加的结果
            echo $user->comment_sum;
            echo "<br>";
        }
    }

注:1、withCount的输出采用“关联方法名_count”,另外withMax()、withMin()、withSum()、withAvg()均可支持这个方法。

2、除了withCount不需要指定字段,其他都要指定统计字段

2、hasWhere关联条件查询

源文链接 https://blog.csdn.net/yang_ldgd/article/details/118570184

标签:comment,删查,class,关联,tp6,Article,article,public
From: https://www.cnblogs.com/djiz/p/17435874.html

相关文章

  • MAUI Android 关联文件类型
    实现效果打开某个文件,后缀是自己想要的类型,在弹出的窗口(用其它应用打开)的列表中显示自己的应用图标点击后可以获得文件信息以便于后续的操作实现步骤以注册.bin后缀为例,新建一个MAUI项目调整启动模式修改Platforms\Android\MainActivity.cs[Activity(Theme="@style......
  • Elasticsearch 之 join 关联查询及使用场景
    在Elasticsearch这样的分布式系统中执行类似SQL的join连接是代价是比较大的,然而,Elasticsearch却给我们提供了基于水平扩展的两种连接形式。这句话摘自Elasticsearch官网,从“然而”来看,说明某些场景某些情况下我们还是可以使用的一、join总述1、关系类比在关系型数据库中,以MySQ......
  • 1004.Django项目用户功能之关联序列化及访问限流
    一、路由器1.SimpleRouter该路由器包括标准集合——list、create、retrieve、update、partial_update、destroy动作的路由。视图集中还可以使用@detail_route或@list_route装饰器标记要被路由的其他方法;2.DefaultRouter这个路由器类似于上面的SimpleRouter,但是还包括一个默......
  • Elasticsearch之join关联查询及使用场景 | 京东云技术团队
    在Elasticsearch这样的分布式系统中执行类似SQL的join连接是代价是比较大的,然而,Elasticsearch却给我们提供了基于水平扩展的两种连接形式。这句话摘自Elasticsearch官网,从“然而”来看,说明某些场景某些情况下我们还是可以使用的一、join总述1、关系类比在关系型数据库中,以MySQL为......
  • 2.索引数组和关联数组,求随机数,递归调用
    总结索引数组和关联数组,字符串处理,高级变量使用及示例。数组1.数组介绍变量:存储单个元素的内存空间数组;存储多个元素的连续的内存空间,相当于多个变量的集合。数组名和索引索引的编号从0开始,属于数组索引索引支持自定义的格式,而不仅是数值格式,即为关联索引。Bash的数组支持稀疏格......
  • 98.关联容器
      关联容器支持高效的关键字查找和访问。两个主要的关联容器(associative-container)类型是map和set。map中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字:set支持高效的关键字查询操作---检查一个给定关键......
  • drf——序列化之source(了解)、定制字段的两种方式(重要)、多表关联反序列化保存、反
    1序列化高级用法之source(了解)#1.创建了5个表(图书管理的5个)#2.对book进行序列化#总结:source的用法 1.修改前端看到的字段key值--->source指定的必须是对象的属性 book_name=serialiazers.CharField(source='name')2.修改前端看到的value值--->source指......
  • 序列化高级用法之source,序列化高级用法之定制字段的两种方式,多表关联反序列化保存,反序
    序列化高级用法之source:source的用法:1修改前端看到的字段key值---》source指定的必须是对象的属性: 前端展示效果: 2. 修改前端看到的value值,---》source指定的必须是对象的方法models中: 序列化类中: 前端展......
  • Typora关联博客园-cnblog
    Typora关联博客园在Typora写完笔记需要上传到博客园时,就会出现图片显示不出来的情况,这个时候就需要考虑将Typora和博客园关联起来,实现联动。实现方案环境准备系统环境:win11软件版本:dotnet-sdk-5.0.408-win-x64下载地址:https://dotnet.microsoft.com/learn/dotnet/hello-wo......
  • 一个程序设计业务中,如果需要这个表数据对应3种业务,但是唯独其中一种要多几个字段去展
    作为一个AI助手,我可以为您提供一些设计思路,但是最终的决定应该基于具体场景和业务需求。一种解决方案是在原表基础上新增字段。这种方法简单快捷,可以避免复杂的表关联,但是会使得表结构变得臃肿,不利于维护和拓展。如果这个表在后续的业务中还需要扩展字段,就会更加困难。另一种解......