总结Laravel的多个领域

时间:2013-03-12 18:17:59

标签: php laravel

我想知道是否可以使用流畅的查询构建器在一个查询中获取多个字段的总和。

我目前有两个表:活动和与会者。与会者属于事件,有两个字段:total_raised和total_hours。我想要做的是选择所有活动以及筹集的总金额/在该活动上花费的总小时数。现在,如果我只是使用SQL,我会做一些事情:

 SELECT Event.id, sum(Attendees.total_raised), sum(Attendees.total_hours)
 FROM Events JOIN Attendees ON Events.id = Attendees.event_id 
 GROUP BY Event.id

但是,我似乎无法使用流畅的查询构建器一次性获取多个总和。有没有什么方法可以使用流畅的方式做我想做的事情,或者我应该把它作为一个原始的SQL查询?

3 个答案:

答案 0 :(得分:5)

您可以使用sum(),即:

$q = DB::table('events')
       ->join('attendees', 'events.id', '=', 'attendees.event_id')
       ->sum('total_raised')
       ->sum('total_hours');

如果这不起作用,您可以尝试:

...

->get(
  array(
    'events.id',
    DB::raw('SUM(attendees.total_raised)'),
    DB::raw('SUM(attendees.total_hours)')
  )
);

答案 1 :(得分:0)

以simones为基础回答。您可以通过基本上运行两个查询来完成此操作。

$query = DB::table('events')->join('attendees', 'events.id', '=', 'attendees.event_id');

$raised = $query->sum( 'total_raised' );

$hours = $query->sum( 'total_hours' );

这取决于具体情况。如果它是管理员/ CMS方面的事情我会倾向于这个解决方案。如果它位于前端,则应该在单个查询中完成,这将更快。根据内容,它可能会或可能不会有显着差异。

$result = DB::table('events')->join('attendees', 'events.id', '=', 'attendees.event_id')
    ->get( array(
        DB::raw( 'SUM(attendees.total_raised) AS raised' ),
        DB::raw( 'SUM(attendees.total_hours) AS hours' ),
    ));

答案 2 :(得分:0)

我在我的项目中做同样的事情,这是我找到的解决方案。我在使用Laravel 5.2 Eloquent这里是Eloquent声明。

我在项目中使用的这句话,请根据您的需要进行更改。

$result = self::select("*", DB::raw('SUM(auction_amount) as total_auction_amount') , DB::raw('SUM(commission_amount) as total_commission_amount'), 
            DB::raw('SUM(deposit_amount) as total_deposit_amount'))
            ->groupBy('cp_user_id')
            ->get()
            ->toArray();

您可以使用与

等查询相同的方式
$result = self::select("*", DB::raw('SUM(auction_amount) as total_auction_amount') , DB::raw('SUM(Attendees.total_raised) as total_raised'), 
            DB::raw('SUM(Attendees.total_hours) as total_hours'))
            ->with('Attendees')
            ->groupBy('id')
            ->get()
            ->toArray();