【问题标题】:How to fetch data with sum and group by in Laravel 5.6如何在 Laravel 5.6 中使用 sum 和 group by 获取数据
【发布时间】:2018-09-27 16:46:25
【问题描述】:

我有两个表(捐赠和成员)我想从捐赠表中获取成员名称表格成员表日期和金额,当我调用它提供的函数和错误(SQLSTATE [42000] :语法错误或访问冲突:1055 'donatensupport.donations.donation_id' 不在 GROUP BY 中(SQL:选择 donations.members.、sum(amount) as amount from @ 987654323@ inner join members on donations.member_id = members.id group by member_id))我用谷歌搜索了好几次,但我没有找到任何解决方案,任何人的帮助提前感谢

控制器

public function index() {
       $donation = DB::table('donations')
            ->join('members', 'donations.member_id', '=', 'members.id')
            ->select('donations.*','members.*', DB::raw('sum(amount) as amount'))
            ->groupBy('member_id')
            ->get();
       return view('donation.index', compact('donation'));
}

捐赠模式

public function member() {
    return $this->belongsTo('App\Member','member_id', 'id');
}

会员模型

public function donation() {
    return $this->hasMany('App\Member');
}

【问题讨论】:

  • 你为什么不用模型?

标签: php laravel


【解决方案1】:

当您使用 group by 时,您不能在 select 中使用捐赠。* 和成员。*。
在这种情况下,您必须明确设置您需要的列名,并确保在 group by 子句中提到不涉及聚合函数的列名

   $donation = DB::table('donations')
        ->join('members', 'donations.member_id', '=', 'members.id')
        ->select('donations.member_id as member_id','members.name as name', DB::raw('sum(amount) as amount'))
        ->groupBy('member_id','name')
        ->get();
        return view('donation.index', compact('donation'));

【讨论】:

  • 我同意最好在 sql 而不是 php 中尽可能多地计算。但是,我想提一下,laravel 集合支持类似的操作,并且 sql 和 php 之间的界限可以以一种非常具有表现力的方式模糊,这种方式很容易在几个月后或下一个开发人员中阅读。 laravel.com/docs/5.6/collections 取决于有多少数据 - 集合可能更直接和可维护。
  • 当我添加日期列时,它也会显示日期,但结果不是我想要的
  • 如果错误消失了,那么您已经找到了错误的原因..“您想要的结果”对我来说似乎是另一个问题
  • 我的捐赠表中也有日期列,所以当我添加日期列总和不起作用时,如何使用金额和名称获取日期
  • 你有错误吗?你的问题有同样的错误吗?
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-11-10
  • 2020-12-23
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多