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'))
groupby分组->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()就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论