Laravel используя Sum и Groupby - PullRequest
0 голосов
/ 27 августа 2018

Я хотел бы получать сумму количества в каждом месяце, чтобы я мог отображать на гистограмме количества против месяца

Это то, что я думал, но не тренировался

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

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Попробуйте этот запрос, вы получите месячный счет:

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();
0 голосов
/ 27 августа 2018

что группа сбора не является красноречивой группой

если вы хотите сделать это с помощью eloquent, нужно:

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

если вы хотите сделать это с помощью метода collectionBy для сбора данных, вы должны сначала выполнить get, затем groupBy.

Как, впрочем, я не уверен, чего вы пытаетесь достичь с помощью того, что вы делаете внутри колбэка ..

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