首页 > 解决方案 > 所有分组的检索行都在第一个月

问题描述

我正在尝试使用按月 laravel 对从数据库中检索到的行进行分组,但所有行都在第一个月进行分组。

$data = Medicals::join("patient_referral", "medicals.trx_id", "=", "patient_referral.trx_id")
    ->where(function ($q) use ($startdate, $enddate) {
        $q->whereBetween('medicals.created_at', [$startdate, $enddate])->get();
    })
    ->leftJoin("patients", "medicals.patients_id", "=", "patients.id")
    ->join("tests", "medicals.tests_id", "=", "tests.id")
    ->get()
    ->groupBy(function (Medicals $item) {
        return Carbon::parse($item->creted_at)->format('m');;
    });

输出 在此处输入图像描述

数据库(医学表)

在此处输入图像描述

请帮忙!!!

标签: databaselaraveleloquentgroup-by

解决方案


您正在加入多个表。默认情况下,将包含这些表中的所有字段/列。我们真的不知道created_at使用了哪个表中的哪个字段。

Medicals::join("patient_referral", "medicals.trx_id", "=", "patient_referral.trx_id")
    ->where(function ($q) use ($startdate, $enddate) {
        $q->whereBetween('medicals.created_at', [$startdate, $enddate])->get();
    })
    // I select all fields from medicals table. You might want to update this later.
    ->selectRaw('medicals.*')
    ->leftJoin("patients", "medicals.patients_id", "=", "patients.id")
    ->join("tests", "medicals.tests_id", "=", "tests.id")
    ->get()
    ->groupBy(function (Medicals $item) {
        return Carbon::parse($item->created_at)->format('m');;
    });

推荐阅读