Насколько мне известно, использование 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
Фасад :
$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');