Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()


Posted in PHP onOctober 23, 2019

Laravel 5.5

Linux mint 18

PHPStorm

最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中的一个字段并返回每个分组中的数量,还是去翻手册(手册确实够简单):

groupBy 和 having 方法可用来对查询结果进行分组。having 方法的用法和 where 方法类似:
$users = DB::table('users')
   ->groupBy('account_id')
   ->having('account_id', '>', 100)
   ->get();

网上去查,发现一个轮子

$user_info = DB::table('usermetas')
    ->select('browser', DB::raw('count(*) as total'))
    ->groupBy('browser')
    ->get();

再去查手册

## 指定一个 Select 子句#

当然,你并不会总是想从数据表中选出所有的字段。这时可使用 select 方法自定义一个 select 子句来查询指定的字段:

$users = DB::table('users')->select('name', 'email as user_email')->get();

## 原始表达式#

有时候你可能需要在查询中使用原始表达式。这些表达式将会被当作字符串注入到查询中,所以要小心避免造成 SQL 注入攻击!要创建一个原始表达式,可以使用 DB::raw 方法:

$users = DB::table('users')
     ->select(DB::raw('count(*) as user_count, status'))
     ->where('status', '<>', 1)
     ->groupBy('status')
     ->get();

可惜总是爱折腾,不想着用点奇迹淫巧就对不起自己这手艺人,于是有了:

$sql = Data::raw('count(*) as value');

$obj = self::whereBetween('modified',[$begin,$end])->select('city as name',$sql)
            ->groupBy('city')
            ->get()
            ->toArray();

代码也不客气了,直接撂了挑子:

毛病出在这句身上:

$sql = Data::raw('count(*) as value');

我用了个Data(Model),返回的是个Builder对象,而此处却要一个字符串,所以改回了

$sql = DB::raw('count(*) as value');

此时$sql是个string,至于有木有办法在此处用Model,慢慢研究吧,任重道远!

参考:

Laravel Eloquent groupBy() AND also return count of each group

以上这篇Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
Windows中使用计划任务自动执行PHP程序实例
May 09 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
php验证session无效的解决方法
Nov 04 PHP
PHP处理大量表单字段的便捷方法
Feb 07 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
解决Laravel无法使用COOKIE和SESSION的问题
Oct 16 PHP
Laravel框架实现定时Task Scheduling例子
Oct 22 PHP
php判断IP地址是否在多个IP段内
Aug 18 PHP
laravel 执行迁移回滚示例
Oct 23 #PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 #PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 #PHP
laravel 出现command not found问题的解决方案
Oct 23 #PHP
关于laravel框架中的常用目录路径函数
Oct 23 #PHP
laravel 实现根据字段不同值做不同查询
Oct 23 #PHP
Laravel修改验证提示信息为中文的示例
Oct 23 #PHP
You might like
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
PHP正则表达式函数preg_replace用法实例分析
2020/06/04 PHP
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
2011/02/11 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
跟老齐学Python之使用Python查询更新数据库
2014/11/25 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
深入解析Python编程中JSON模块的使用
2015/10/15 Python
Python实现自动上京东抢手机
2018/02/06 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
python批量解压zip文件的方法
2019/08/20 Python
Perfume’s Club意大利官网:欧洲美妆电商
2019/05/03 全球购物
自我介绍演讲稿
2014/01/15 职场文书
心理健康教育制度
2014/01/27 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
高中物理教学反思
2016/02/19 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL