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 相关文章推荐
WML,Apache,和 PHP 的介绍
Oct 09 PHP
PHP 写文本日志实现代码
May 18 PHP
yii的CURD操作实例详解
Dec 04 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
PHP请求Socket接口测试实例
Aug 12 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP安装BCMath扩展的方法
Feb 13 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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
十天学会php之第四天
2006/10/09 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
PHP Cookie学习笔记
2016/08/23 PHP
PHP观察者模式定义与用法实例分析
2019/03/22 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
基于JQuery的cookie插件
2010/04/07 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
使用vue.js开发时一些注意事项
2016/04/27 Javascript
jQuery中的deferred对象和extend方法详解
2017/05/08 jQuery
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
React Native基础入门之调试React Native应用的一小步
2018/07/02 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
python中操作文件的模块的方法总结
2021/02/04 Python
应届生高等护理求职信
2013/10/12 职场文书
电气专业应届生求职信
2013/11/01 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python
python利用while求100内的整数和方式
2021/11/07 Python
MySQL数据库完全卸载的方法
2022/03/03 MySQL