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开发文件系统实例讲解
Oct 09 PHP
PHP4实际应用经验篇(4)
Oct 09 PHP
php header()函数使用说明
Jul 10 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
thinkphp框架下404页面设置 仅三步
May 14 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
PHP数组与字符串互相转换实例
May 05 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
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
JavaScript Accessor实现说明
2010/12/06 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
python中assert用法实例分析
2015/04/30 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
Python中@property的理解和使用示例
2019/06/11 Python
Python对列表的操作知识点详解
2019/08/20 Python
详解python中各种文件打开模式
2020/01/19 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
临床医师专业个人自我评价范文
2013/11/07 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
求职自荐信的格式
2014/04/07 职场文书
社区戒毒工作方案
2014/06/04 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
MongoDB使用profile分析慢查询的步骤
2021/04/30 MongoDB
pandas 实现将NaN转换为None
2021/05/14 Python
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Nginx 常用配置
2022/05/15 Servers