Laravel Eloquent计算多种数据范围

问题描述 投票:0回答:1

我正在试图找出如何创建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中成功?没有在文档中看到它。谢谢

laravel eloquent
1个回答
1
投票

据我所知,使用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;

在上面的代码中,返回点在05.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');
© www.soinside.com 2019 - 2024. All rights reserved.