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 相关文章推荐
第二节 对象模型 [2]
Oct 09 PHP
在任意字符集下正常显示网页的方法二(续)
Apr 01 PHP
php 什么是PEAR?
Mar 19 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
试用php中oci8扩展
Jun 18 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP获取当前日期及本周一是几月几号的方法
Mar 28 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 define函数的使用说明
2008/08/27 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
基于jquery DOM写的类似微博发布的效果
2012/10/20 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
python 的列表遍历删除实现代码
2020/04/12 Python
Python中实现switch功能实例解析
2018/01/11 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
审计专业自荐信范文
2014/04/21 职场文书
3分钟英语演讲稿
2014/04/29 职场文书
爱护花草树木的标语
2014/06/11 职场文书
优秀应届生求职信
2014/06/16 职场文书
市级三好生竞选稿
2015/11/21 职场文书
python 逐步回归算法
2021/04/06 Python
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL