【问题标题】:How to group retrieved rows by months?如何按月对检索到的行进行分组?
【发布时间】:2021-04-30 01:23:04
【问题描述】:

我正在开发一个涉及按月对选定行进行分组的应用程序。我该怎么办?

  $data = Medicals::where("patient_referral.referred_by", "like", "%" .  $searchitem . "%")
        ->leftJoin("patients", "medicals.patients_id", "=", "patients.id")
        ->join("patient_referral", "medicals.trx_id", "=", "patient_referral.trx_id")
        ->join("tests", "medicals.tests_id", "=", "tests.id")
        ->groupBy(function (Medicals $item) {
            return $item->created_at->format('Y-m');
        })
        ->get();

这是我遇到的错误

错误异常 stripos() 期望参数 1 是字符串,给定对象

【问题讨论】:

  • 您遇到了什么问题,您的查询是否按预期工作?您需要在问题中添加更多信息。如果您遇到错误,请将其添加到您的问题中。
  • @Tony 我更新了我的问题

标签: laravel eloquent


【解决方案1】:

您调用groupBy 的方式是针对集合,而不是查询。您需要将 groupBy 移动到 get 之后,以便尝试对生成的 Collection 进行分组。

    ...
    ->get()
    ->groupBy(function ($item) {
        return $item->created_at->format('Y-m');
    });

【讨论】:

    【解决方案2】:

    您可以使用groupBy 中的原始查询在数据库中执行它:

    $data = Medicals::where("patient_referral.referred_by", "like", "%" .  $searchitem . "%")
            ...
            ->groupBy(DB::raw('DATE_FORMAT(medicals.created_at, "%Y-%m")'))
            ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      相关资源
      最近更新 更多