在Laravel ELoquent中加入并求和

Sid*_*rth 8 mysql laravel eloquent

数据库结构如下:

表:用户

id | name | email | password
Run Code Online (Sandbox Code Playgroud)

表:分析

id | user_id(fk) | article_id(fk) | revenue | date | clicks 
Run Code Online (Sandbox Code Playgroud)

现在,我需要这两个表中所有用户的列表以及他们自己的收入之和。

我尝试了如下:

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

但这给我抛出了错误。

小智 6

你可以尝试这个

$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();
Run Code Online (Sandbox Code Playgroud)

  • 也许您还想添加 `->groupBy('users.id')` 语句。 (2认同)

Ami*_*rul 5

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

您需要在 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();
Run Code Online (Sandbox Code Playgroud)