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中的日期处理方法集锦
Jan 02 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
curl和libcurl的区别简介
Jul 01 PHP
PHP引用返回用法示例
May 28 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
截获网站title标签之家内容的例子
2006/10/09 PHP
php自动加载的两种实现方法
2010/06/21 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
探讨jQuery的ajax使用场景(c#)
2013/12/03 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
2018/10/07 Javascript
Node.js中package.json中库的版本号(~和^)
2019/04/02 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
win与linux系统中python requests 安装
2016/12/04 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
Python 实现Windows开机运行某软件的方法
2018/10/14 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
团员个人的自我评价
2013/12/02 职场文书
护理个人求职信范文
2014/01/08 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
css3实现背景图片颜色修改的多种方式
2021/04/13 HTML / CSS
css3应用示例:新增的选择器
2022/03/16 HTML / CSS