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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 PHP
PHP二维数组去重实例分析
Nov 18 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP使用函数用法详解
Sep 30 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
Feb 20 PHP
PHP数组基本用法与知识点总结
Jun 02 PHP
laravel中Redis队列监听中断的分析
Sep 14 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中iconv函数使用方法
2008/05/24 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Django实现学员管理系统
2019/02/26 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
keras 读取多标签图像数据方式
2020/06/12 Python
详细分析Python collections工具库
2020/07/16 Python
网络工程师个人的自我评价范文
2013/10/01 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
《大海那边》教学反思
2014/04/09 职场文书
委托证明范本
2014/11/25 职场文书
出国留学自荐信模板
2015/03/06 职场文书
个人年底工作总结
2015/03/10 职场文书
开学典礼观后感
2015/06/15 职场文书
2019新员工心得体会
2019/06/25 职场文书