6关联统计
未知
2021-07-04 11:27:36
0

关联统计

有些时候,并不需要获取关联数据,而只是希望获取关联数据的统计,这个时候可以使用withCount方法进行指定关联的统计。

$list = User::withCount('cards')->select([1,2,3]);
foreach($list as $user){
    // 获取用户关联的card关联统计
    echo $user->cards_count;
}
复制

你必须给User模型定义一个名称是cards的关联方法。

关联统计功能会在模型的对象属性中自动添加一个以“关联方法名+_count”为名称的动态属性来保存相关的关联统计数据。

可以通过数组的方式同时查询多个统计字段。

$list = User::withCount(['cards', 'phone'])->select([1,2,3]);
foreach($list as $user){
    // 获取用户关联关联统计
    echo $user->cards_count;
    echo $user->phone_count;
}
复制

支持给关联统计指定统计属性名,例如:

$list = User::withCount(['cards' => 'card_count'])->select([1,2,3]);
foreach($list as $user){
    // 获取用户关联的card关联统计
    echo $user->card_count;
}
复制

关联统计暂不支持多态关联

如果需要对关联统计进行条件过滤,可以使用闭包方式。

$list = User::withCount(['cards' => function($query) {
    $query->where('status',1);
}])->select([1,2,3]);

foreach($list as $user){
    // 获取用户关联的card关联统计
    echo $user->cards_count;
}
复制

使用闭包的方式,如果需要自定义统计字段名称,可以使用

$list = User::withCount(['cards' => function($query, &$alias) {
    $query->where('status',1);
    $alias = 'card_count';
}])->select([1,2,3]);

foreach($list as $user){
    // 获取用户关联的card关联统计
    echo $user->card_count;
}
复制

withCount类似的方法,还包括:

关联统计方法 描述
withSum 关联SUM统计
withMax 关联Max统计
withMin 关联Min统计
withAvg 关联Avg统计

除了withCount之外的统计方法需要在第二个字段传入统计字段名,用法如下:

$list = User::withSum('cards', 'total')->select([1,2,3]);

foreach($list as $user){
    // 获取用户关联的card关联余额统计
    echo $user->cards_sum;
}
复制

同样,也可以指定统计字段名

$list = User::withSum(['cards' => 'card_total'], 'total')->select([1,2,3]);

foreach($list as $user){
    // 获取用户关联的card关联余额统计
    echo $user->card_total;
}
复制

所有的关联统计方法可以多次调用,每次查询不同的关联统计数据。

$list = User::withSum('cards', 'total')
    ->withSum('score', 'score') 
    ->select([1,2,3]);

foreach($list as $user){
    // 获取用户关联的card关联余额统计
    echo $user->card_total;
}
复制

上一篇:6关联预载入

下一篇:6关联输出

相关内容

网站前端有些页面加载快有些...
网站前端有些页面加载快有些慢或者后端打开快前端打开慢
2023-12-12 14:27:16
浏览器js带参数版本或时间...
浏览器打开F12后,查看网络,js带参数版本或时间戳的文件,有些已...
2023-12-06 11:26:02
6输出路由定义
输出并生成路由列表 假设你的路由定义文件内容为: Route : ...
2021-07-04 11:52:02
6路由验证
可以在路由规则定义的时候调用 validate 方法指定验证器类对...
2021-07-04 11:42:08
6Trace调试
调试模式并不能完全满足我们调试的需要,有时候我们需要手动的输出一些...
2021-07-04 11:38:34
6关联输出
关联数据的输出也可以使用 hidden 、 visible 和 a...
2021-07-04 11:27:53

热门资讯

tp6开发规范 命名规范 请理解并尽量遵循以下命名规范,可以减少在开发过程中出现不必要的错误。 ThinkPHP6....
6高级查询 快捷查询 快捷查询方式是 一种多字段相同查询条件 的简化写法,可以进一步简化查询条件的写法,在多个字...
tp6多应用提示控制器不存在:... 第一个情况是没有使用composer安装扩展。 如果要使用多应用模式, 你需要win+r,cmd指针...
6配置 配置目录 单应用模式 对于单应用模式来说,配置文件和目录很简单,根目录下的 config 目录下面就...
6异常处理 和PHP默认的异常处理不同,ThinkPHP抛出的不是单纯的错误信息,而是一个人性化的错误页面。 异...
6swoole 本篇内容主要讲述了最新的 think-swoole 扩展的使用。目前仅支持Linux环境或者MacO...
6助手函数 助手函数 系统为一些常用的操作方法封装了助手函数,便于使用,包含如下: 助手函数 描述 abort ...
6查询表达式 查询表达式 查询表达式支持大部分的SQL查询语法,也是 ThinkPHP 查询语言的精髓,查询表达式...
6路由参数 路由参数 路由分组及规则定义支持指定路由参数,这些参数主要完成路由匹配检测以及后续行为。 路由参数可...
6查询 模型查询和数据库查询方法的区别主要在于,模型中的查询的数据在获取的时候会经过获取器的处理,以及更加对...