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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
php面向对象的方法重载两种版本比较
Sep 08 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
php的ZipArchive类用法实例
Oct 20 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
php四种定界符详解
Feb 16 PHP
PHP经典实用正则表达式小结
May 04 PHP
Mac下关于PHP环境和扩展的安装详解
Oct 17 PHP
PHP isset()及empty()用法区别详解
Aug 29 PHP
PHP 图片处理
Sep 16 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
各种战术和打法的原创者
2020/03/04 星际争霸
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
php格式化时间戳
2016/12/17 PHP
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
vue从使用到源码实现教程详解
2016/09/19 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
js实现小时钟效果
2020/03/25 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python字典序问题实例
2014/09/26 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python实现内存监控系统
2021/03/07 Python
python中的tcp示例详解
2018/12/09 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
PyQt5实现登录页面
2020/05/30 Python
浅析Python面向对象编程
2020/07/10 Python
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
大学生求职信范文应怎么写
2014/01/01 职场文书
技术入股合作协议书
2014/10/07 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
大学生在校表现评语
2014/12/31 职场文书
放弃继承权公证书
2015/01/23 职场文书
幼儿园个人总结
2015/02/28 职场文书
《葡萄沟》教学反思
2016/02/23 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android