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 相关文章推荐
生成卡号php代码
Apr 09 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php发送http请求的常用方法分析
Nov 08 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
分析php://output和php://stdout的区别
May 06 PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 PHP
PHP一致性hash分布式算法封装类定义与用法示例
Aug 04 PHP
PHP使用PDO、mysqli扩展实现与数据库交互操作详解
Jul 20 PHP
PHP使用非对称加密算法RSA
Apr 21 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 array_push 数组函数
2009/12/26 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP如何实现跨域
2016/05/30 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
Ionic项目中Native Camera的使用方法
2017/06/07 Javascript
ionic App问题总结系列之ionic点击系统返回键退出App
2017/08/19 Javascript
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
微信小程序引入VANT组件的方法步骤
2019/09/19 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
vuex的使用步骤
2021/01/06 Vue.js
用Python中的字典来处理索引统计的方法
2015/05/05 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
Python 忽略文件名编码的方法
2020/08/01 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
硕士生工作推荐信
2014/03/07 职场文书
铁路安全事故反思
2014/04/26 职场文书
检讨书模板
2015/01/29 职场文书
2015年度高中教师工作总结
2015/05/26 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
详解Vue的options
2021/05/15 Vue.js
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js