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