【问题标题】:Laravel Eloquent counts with multiple ranges of dataLaravel Eloquent 计算多个数据范围
【发布时间】:2019-03-17 00:15:02
【问题描述】:

我正在尝试弄清楚如何创建 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】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多