• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()

    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()就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • 详解SQL中Group By的使用教程
    • Django ORM 聚合查询和分组查询实现详解
    • 分组查询GROUP BY的使用与SQL执行顺序的讲解
    • MySQL分组查询Group By实现原理详解
    • 详解MySQL中的分组查询与连接查询语句
    • sql 分组查询问题
    • Oracle中分组查询group by用法规则详解
    上一篇:laravel 执行迁移回滚示例
    下一篇:laravel框架之数据库查出来的对象实现转化为数组
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy() Laravel,实现,Eloquent,模型,