【问题标题】:Join and SUM in Laravel ELoquent在 Laravel ELoquent 中加入和求和
【发布时间】:2016-06-26 07:52:53
【问题描述】:

数据库结构如下:

表:用户

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

但它给我带来了错误。

【问题讨论】:

  • 我不了解 larave,但正如我看到您的查询,您没有按用户分组使用。添加组后它会起作用
  • 在这一点上,我认为 Eloquent 实际上并没有增加太多抽象价值,你最好做一个DB::connection()->getPdo() 并手动编写查询。

标签: mysql laravel eloquent


【解决方案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();

【讨论】:

  • 也许您还想添加一个->groupBy('users.id') 语句。
【解决方案2】:
$users = User::select(\DB::raw('users.*, SUM(analytics.revenue) as revenue'))
         ->leftJoin('analytics', 'analytics.user_id', '=', 'users.id')
         ->groupBy('users.id')
         ->get();

【讨论】:

    【解决方案3】:

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

    您需要在 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-24
      • 2022-01-01
      • 2014-09-13
      • 2015-02-12
      • 2014-08-30
      • 2019-09-11
      相关资源
      最近更新 更多