我正在试图找出如何创建Laravel查询,它将产生以下mysql查询。
select
count(CASE WHEN points BETWEEN 0 AND 1.99 THEN 1 END) as count0_199,
count(CASE WHEN points BETWEEN 2 AND 3.99 THEN 1 END) as count2_399,
count(CASE WHEN points BETWEEN 4 AND 5.99 THEN 1 END) as count4_599
from
stats
是否有可能在Eloquent中成功?没有在文档中看到它。谢谢
据我所知,使用eloquent执行此操作将涉及返回数据的一些格式:
$results = [];
$stats = Stat::where('points', '>=', '0')
->where('points', '<=', 5.99)
->get()
->each(function ($stat, $key) use (&$results) {
if ($stat->points >= 0 && $stat->points <= 1.99) {
$results['count0_199'][] = $stat;
}
if ($stat->points >= 2 && $stat->points <= 3.99) {
$results['count2_399'][] = $stat;
}
if ($stat->points >= 4 && $stat->points <= 5.99) {
$results['count4_599'][] = $stat;
}
});
return $results;
在上面的代码中,返回点在0
和5.99
之间的所有统计数据(因为它们将被返回)。然后循环返回的集合以填充$results
数组,该数组将对返回的数据进行分组。
还有DB
Facade:
$query = [
'count(CASE WHEN points BETWEEN 0 AND 1.99 THEN 1 END) as count0_199',
'count(CASE WHEN points BETWEEN 2 AND 3.99 THEN 1 END) as count2_399',
'count(CASE WHEN points BETWEEN 4 AND 5.99 THEN 1 END) as count4_599'
];
$results = DB::select(implode(',', $query) . ' from stats');