laravel 4,AVG和COUNT在连接查询中

时间:2013-05-16 17:51:01

标签: php laravel laravel-4

我正在尝试使用av​​g执行查询并在行结果中执行计数,类似于:

SELECT r.id, avg( p.puntuacio ), count(p.puntuacio)
FROM receptes AS r, puntuacio_receptes_usuaris AS p
WHERE r.id = p.recepta_id
GROUP BY r.id

但我不知道我能否在Laravel上做,因为在Eloquent中无法在结果行中写入avg或count。

非常感谢

2 个答案:

答案 0 :(得分:4)

Query Builder(Fluent)方法:

DB::table(DB::raw('receptes as r, puntuacio_receptes_usuaris as p'))
        ->select(array('r.id', DB::raw('avg( p.puntuacio ) as avg_p'), DB::raw('count(p.puntuacio) as count_p')))
        ->where('r.id', DB::raw('p.recepta_id'))
        ->groupBy('r.id')
        ->get();

这应该没有任何问题,但是如果您想使用您的Eloquent模型,我建议使用JOIN而不是FROM中使用两个表。

您可以访问avg_pcount_p来访问平均值并计算结果。

注意

  • DB::raw()指示Laravel不要逃避其中的内容see the doc

答案 1 :(得分:1)

如果您需要使用Eloquent会转义的内容,您可以使用DB::raw()创建原始表达式。

有关示例,请参阅documentation on raw expressions