Laravel Eloquent считает несколько диапазонов данных - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь выяснить, как создать запрос 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?Не видел этого в документации.Спасибо

1 Ответ

1 голос
/ 15 марта 2019

Насколько мне известно, использование 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...