Mysql 加入和总结在拉拉威尔雄辩

Mysql 加入和总结在拉拉威尔雄辩,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,数据库结构如下: $users = User::select('users*', 'analytics.*', 'SUM(analytics.revenue)') ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id) ->where('analytics.date', Carbon::today()->toDateString()) ->get();

数据库结构如下:

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

表:分析

现在我想要所有用户的列表,以及他们自己从这两个表中获得的收入的总和

我的尝试如下:

$users = User::select('users*', 'analytics.*', 'SUM(analytics.revenue)')
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id)
         ->where('analytics.date', Carbon::today()->toDateString())
         ->get();
但这给我带来了错误。

你可以试试这个

$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();

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

您需要在groupBy中包含每个select列。就你而言:

$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();

我不了解larave,但正如我看到的,您的查询不是按用户分组使用的。在添加groupBy之后,它将在这一点上起作用,在我看来,Eloquent实际上并没有增加太多的抽象值,你最好做一个
DB::connection()->getPdo()
并手工编写查询。也许你还想添加一个
->groupBy('users.id')
语句。
$users = User::select(\DB::raw('users.*, SUM(analytics.revenue) as revenue'))
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id')
         ->groupBy('users.id')
         ->get();
$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();