在Laravel ELoquent加入和SUM

时间:2016-03-11 06:50:16

标签: mysql laravel eloquent

数据库结构如下:

  

表:用户

id | name | email | password
  

表:分析

id | user_id(fk) | article_id(fk) | revenue | date | clicks 

现在,我希望所有用户的列表中包含来自这两个表的收入的总和。

我尝试的内容如下:

$users = User::select('users*', 'analytics.*', 'SUM(analytics.revenue)')
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id)
         ->where('analytics.date', Carbon::today()->toDateString())
         ->get();

但它给我带来了错误。

3 个答案:

答案 0 :(得分:2)

$users = User::select(\DB::raw('users.*, SUM(analytics.revenue) as revenue'))
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id')
         ->groupBy('users.id')
         ->get();

答案 1 :(得分:1)

你可以试试这个

$users = User::select('users*', 'analytics.*', DB::raw('SUM(analytics.revenue) As revenue'))
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id')
         ->where('analytics.date', Carbon::today()->toDateString())
         ->get();

答案 2 :(得分:0)

这可能有点晚了。也许会帮助别人。

您需要在groupBy中包括每个选择列。就您而言:

$users = User::select('users.id', 'users.name', 'users.password', 'analytics.date', 'analytics.clicks', 'SUM(analytics.revenue) as revenue')
     ->leftJoin('analytics', 'users.id', '=', 'analytics.user_id')
     ->where('analytics.date', Carbon::today()->toDateString())
     ->groupBy('users.id', 'users.name', 'users.password', 'analytics.date', 'analytics.clicks') 
     ->get();