数据库结构如下:
表:用户
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();
但它给我带来了错误。
答案 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();