这对我有用:
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->get();
这对我有用(Laravel 5.1):
$user_info = Usermeta::groupBy('browser')->select('browser', DB::raw('count(*) as total'))->get();
谢谢安东尼奥,
我刚刚在末尾添加了 lists
命令,因此它只会返回一个带有键和计数的数组:
拉拉维尔 4
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->lists('total','browser');
拉拉维尔 5.1
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->lists('total','browser')->all();
Laravel 5.2+
$user_info = DB::table('usermetas')
->select('browser', DB::raw('count(*) as total'))
->groupBy('browser')
->pluck('total','browser');
如果要获取集合、groupBy 和计数:
$collection = ModelName::groupBy('group_id')
->selectRaw('count(*) as total, group_id')
->get();
干杯!
打开 config/database.php 找到mysql连接设置里面的strict key 将值设置为false
也可以这样工作,更整洁一些。 getQuery()
只返回已经包含表引用的基础构建器。
$browser_total_raw = DB::raw('count(*) as total');
$user_info = Usermeta::getQuery()
->select('browser', $browser_total_raw)
->groupBy('browser')
->pluck('total','browser');
试试这个
->groupBy('state_id','locality')
->havingRaw('count > 1 ')
->having('items.name','LIKE',"%$keyword%")
->orHavingRaw('brand LIKE ?',array("%$keyword%"))
havingRaw
位非常好,因为它还可以让您根据计数过滤掉您不想要的结果。当您想要进行一些“和过滤”并为每个过滤器连接时会派上用场。
$post = Post::select(DB::raw('count(*) as user_count, category_id'))
->groupBy('category_id')
->get();
这是一个按类别计算帖子计数的示例。
Laravel 版本 8
删除了对 DB 的依赖
$counts = Model::whereIn('agent_id', $agents)
->orderBy('total', 'asc')
->selectRaw('agent_id, count(*) as total')
->groupBy('agent_id')
->pluck('total','agent_id')->all();
另一种方法是:
$data = Usermeta::orderBy('browser')->selectRaw('browser, count(*) as total')->get()
在 Laravel 8 中,您可以使用 countBy()
来获取组的总数。
检查相同的文档。 https://laravel.com/docs/8.x/collections#method-countBy
这是一种无需使用原始语句即可处理 group by 的更多 Laravel 方法。
$sources = $sources->where('age','>', 31)->groupBy('age');
$output = null;
foreach($sources as $key => $source) {
foreach($source as $item) {
//get each item in the group
}
$output[$key] = $source->count();
}
如果你想得到排序的数据也使用这个
$category_id = Post::orderBy('count', 'desc')
->select(DB::raw('category_id,count(*) as count'))
->groupBy('category_id')
->get();
简单的解决方案(使用 Laravel 9 和 Spatie/Permissions 测试)。
控制器:
//Get permissions group by guard name(3 in my case: web, admin and api)
$permissions = Permission::get()->groupBy('guard_name');
看法:
@foreach($permissions as $guard => $perm)
<div class="form-group">
<label for="permission">Permissions ({{ ucfirst($guard) }}) {{ count($perm) }}</label>
<select name="permission[]" id="permission" class="form-control @error('permission') is-invalid @enderror" multiple>
@foreach($perm as $value)
<option value="{{ $value->id }}">{{ $value->name }}</option>
@endforeach
</select>
@error('permission')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
@endforeach
不定期副业成功案例分享
DB::table('usermetas')->..
而不是Usermeta::..
有什么特别的原因吗?