【问题标题】:Laravel using Sum and GroupbyLaravel 使用 Sum 和 Groupby
【发布时间】:2019-02-02 02:43:00
【问题描述】:

我想获取每个月的数量总和,以便我可以在条形图上显示月份的数量

这是我的想法,但没有锻炼

 $data1 = Borrow::groupBy(function($d) {
 return Carbon::parse($d->created_at)->format('m')->sum('quantity');
 })->get();

我的表结构

Schema::create('borrows', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('member_id');
        $table->integer('book_id');
        $table->integer('quantity');
        $table->integer('status')->default(0);
        $table->timestamps();
    });

【问题讨论】:

  • 你的quantity字段是字符串类型,你要求和,必须是整数类型?
  • 是的,它是整数类型,我复制了错误的故事结构

标签: php laravel eloquent laravel-5.6 laravel-collection


【解决方案1】:

一个集合组by不是一个雄辩的groupby

如果你想用 eloquent 做到这一点,必须:

 $data1 = Borrow::selectRaw('SUM(quantity) as qt, MONTH(created_at) as borrowMonth')
      ->groupBy('borrowMonth')->get();

如果你想用集合 groupBy 方法来做,你应该先做 get,然后做 groupBy。

虽然我不确定你想用你在回调中所做的事情来完成什么..

 $data1 = Borrow::get()->groupBy(function($d) {
 return Carbon::parse($d->created_at)->format('m')->sum('quantity');
 });

【讨论】:

  • 你能帮忙写下我的查询吗
  • 试试那个,我认为它应该可以满足您的需要
【解决方案2】:

试试这个查询,你会得到月数:

use DB;


 $month_wise_count=DB::table("borrows")
        ->select(DB::raw('CONCAT(MONTHNAME(created_at), "-",  YEAR(created_at)) AS month_year'),
                DB::raw("MONTH(created_at) as month , YEAR(created_at) as year"),
                DB::raw("(COUNT(*)) as total_records"),
                DB::row("(SUM('quantity') as total_value"))
        ->orderBy(DB::raw("MONTH(created_at),YEAR(created_at)"))
        ->groupBy(DB::raw("MONTH(created_at),YEAR(created_at)"))
        ->get();

【讨论】:

    猜你喜欢
    • 2019-01-30
    • 2018-02-07
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2016-05-06
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多