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 作用域解析运算符(::)
Jul 27 PHP
php模板函数 正则实现代码
Oct 15 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
浅析php fwrite写入txt文件的时候用 \r\n不能换行的问题
Aug 06 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
PHP+Ajax异步带进度条上传文件实例
Nov 01 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
Apr 04 PHP
Smarty模板类内部原理实例分析
Jul 03 PHP
PHP中strval()函数实例用法
Jun 07 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
德生1994机评
2021/03/02 无线电
php多维数组去掉重复值示例分享
2014/03/02 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
给大家分享几个常用的PHP函数
2017/01/15 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
使用javascript插入样式
2016/03/14 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
解决vue keep-alive 数据更新的问题
2018/09/21 Javascript
利用Python批量生成任意尺寸的图片
2016/08/29 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
深圳茁壮笔试题
2015/05/28 面试题
2014年干部作风建设总结
2014/10/23 职场文书
资料员岗位职责
2015/02/10 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
企业宣传稿范文
2015/07/23 职场文书
尊师重教主题班会
2015/08/14 职场文书
教师读书活动心得体会
2016/01/14 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang