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下使用curl模拟用户登陆的代码
Sep 10 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP基本语法总结
Sep 06 PHP
php计算整个目录大小的方法
Jun 01 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
php四种定界符详解
Feb 16 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php实现等比例压缩图片
Jul 26 PHP
PHP中散列密码的安全性分析
Jul 26 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 addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
AngularJS入门心得之directive和controller通信过程
2016/01/25 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
微信小程序实现顶部导航特效
2019/01/28 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
Python编程中的for循环语句学习教程
2015/10/14 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
python assert的用处示例详解
2019/04/01 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
python如何操作mysql
2020/08/17 Python
python实现画图工具
2020/08/27 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
毕业生求职简历中的自我评价
2013/10/18 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
机关作风建设整改方案
2014/10/27 职场文书
技术负责人岗位职责
2015/02/10 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript