dimanche 3 décembre 2017

Return data ordered by date

I have a function that returns the count of sales each day. The problem with this approach is that I want the data to be stored by date but I am getting them in the following order:

01-Dec
02-Dec
03-Dec
03-Nov
04-Nov
05-Nov
etc.

I understand why that happens but I am not sure how to solve it. I can replace subMonth(1) with startofmonth which woul partially solve my problem but this is not what I want. I instead want to return the last 30 days ordered.

    return DB::table('sales')
        ->select(\DB::RAW('DATE_FORMAT(created_at, "%d-%M") as date'), \DB::raw('COUNT(*) as count'))
        ->where('created_at', '>=', Carbon::now()->subMonth(1))
        ->orderBy('date')
        ->groupBy('date')
        ->get(['date', 'count'])
        ->keyBy('date')
        ->transform(function ($data) {
            return $data->count;
        });

I also tried orderBy('created_at') but it gives me the error below and I'd like to avoid changing the sql mode.

Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'x.sales.created_at' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire