Laravel Eloquent - 查找一个月内一组天的平均值

时间:2016-05-03 20:15:32

标签: database laravel eloquent

我有两个列。一个是datetime(imeromina_metrisis),另一个是整数(apotelesma)。我想要做的是获取每天的平均整数,以便我可以将其发送到图表。你知道我怎么能这样做吗?

这是我的表here

3 个答案:

答案 0 :(得分:1)

我们需要首先获取DATE格式,而不是使用DATETIME,因为您需要每天的数据。试试这个查询

$data = DB::table('table_name')
        ->select(DB::raw('avg(apotelesma) as count, DATE(imeromina_metrisis) day'))
        ->groupBy('day')
        ->get();

参考如何选择原始表达式here

答案 1 :(得分:0)

可能是这样的。

$avg = Model::where('imeromina_metreisis', $carbon)->avg('apotelesma');

请参阅:
https://laravel.com/docs/5.1/queries#aggregates

请注意您的日期列。 $carbon是一个变量,表示Laravel广泛使用的Carbon日期和时间对象。如果平均值是一整天,但您使用的是日期时间(包括小时/分钟/秒),您将需要执行此类操作。

$carbon = Carbon::now()->startOfDate();
$avg = Model::where('imeromina_metreisis', '>=', $carbon)
    ->where('imeromina_metreisis', '<=', $carbon->copy()->endOfDay())
    ->avg('apotelesma');

是的,那些都是内置的Carbon方法。它真的是一个很棒的图书馆。

编辑:有关Carbon的更多文档。我想你想要任意的日间范围 http://carbon.nesbot.com/docs/

答案 2 :(得分:0)

好吧,我发现使用Eloquent + Fluent解决方案可以使用我的关系。 这是我的代码,用于收集我的所有文章+用户+评分平均值

$articles = Articles::where('state', '=', '1')
->with('user')
->leftJoin('ratings', 'ratings.article_id', '=', 'articles.id')
->select(array('articles.*',
    DB::raw('AVG(rating) as ratings_average')
    ))
->groupBy('id')
->orderBy('ratings_average', 'DESC')
->get();