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 相关文章推荐
PHP5中的时间相差8小时的解决办法
Mar 28 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
PHP实现时间轴函数代码
Oct 08 PHP
php实现的获取网站备案信息查询代码(360)
Sep 23 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
PHP生成条形图的方法
Dec 10 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
Thinkphp单字母函数使用指南
May 08 PHP
Yii2中DropDownList简单用法示例
Jul 18 PHP
php实现的中文分词类完整实例
Feb 06 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 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 output buffering缓存及程序缓存深入解析
2013/07/15 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php时间计算相关问题小结
2016/05/09 PHP
php中请求url的五种方法总结
2017/07/13 PHP
深入分析PHP设计模式
2020/06/15 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
jquery插件之easing使用
2010/08/19 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
Angular企业级开发——MVC之控制器详解
2017/02/20 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
python使用正则表达式检测密码强度源码分享
2014/06/11 Python
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
简介Django中内置的一些中间件
2015/07/24 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
使用matlab或python将txt文件转为excel表格
2019/11/01 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
python 画图 图例自由定义方式
2020/04/17 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
校园歌手大赛策划书
2014/01/17 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python