【问题标题】:Laravel: Get data with custom dateLaravel:使用自定义日期获取数据
【发布时间】:2021-07-14 11:16:44
【问题描述】:

我想像这样在 laravel 中获取数据:

level: SMP
year: 2020
month: Jan - May
value : 46

level: SD
year: 2020
month: Feb-Apr
value : 23

其中“价值”是该月的学生人数。如何显示数据(尤其是月份部分)?我试过了,但它返回如下:

这是我的代码:

编辑:

例如,我想将同年同级别的数据合二为一, 之前:

level: SD
year: 2021
month: Jan
value : 2

level: SD
year: 2021
month: Feb
value : 1

level: SD
year: 2021
month: Mar
value : 4

level: SMP
year: 2020
month: Feb
value: 10

之后:

level: SD
year: 2021
month: Jan - Mar
value : 7

level: SMP
year: 2020
month: Feb
value: 10

【问题讨论】:

  • 展示一个你想得到什么的例子
  • 因为我想以表格形式将数据导出为pdf
  • 好的,好的,我得到了你需要的东西
  • 如何在数据库中存储月份?它是什么类型的
  • 请将您的图片添加为文本,这样如果图片被删除,您的问题仍然可以理解。

标签: php laravel


【解决方案1】:

这按级别分组并汇总月份: SQL:

$students = DB::table('students')->select(
    DB::raw("SUBSTRING_INDEX(grade,' ',-1) AS level"),
    DB::raw("DATE_FORMAT(students.created_at, '%Y') as year"),
    DB::raw('DATE_FORMAT(students.created_at, "%m") as month'),
    DB::raw('CAST(count(*) AS CHAR)as value')
)
    ->whereNotNull('grade')
    ->groupBy('level', 'year')
    ->orderBy('level','ASC')
    ->orderBy('year','ASC')
    ->get();
return $students;
/*$monthNum = function ($entry) {
  return Carbon\Carbon::parse('1 '.$entry->month)->month;
};*/

$students = $students->groupBy('level', 'year')->map(function($group, $level)/* use($monthNum)*/ {
  return (object)[
    "level" => $level,
    "year" => $group[0]->year,
    //"month" => date("M",mktime(0,0,0,$group->min($monthNum),1,date('Y')))." \u{2012} ".date("M",mktime(0,0,0,$group->max($monthNum),1,date('Y'))),
    "month" => date("M",mktime(0,0,0,$group->min(),1,date('Y')))." \u{2012} ".date("M",mktime(0,0,0,$group->max(),1,date('Y'))),
    "value"  => $group[0]->value
  ];
})->values();

【讨论】:

  • 这很糟糕。为什么不用sql查询?
  • 仅仅因为它不是你的解决方案,这不会让我的问题变得糟糕。因为您的解决方案列出了所有月份,而不是 - 按照 TO 的要求 - 第一个月和最后一个月
  • 当我写答案时,问题没有得到澄清。我相信sql版本处理大量数据会更快
  • 认为最好在级别和年份上应用 groupBy,除了聚合每个月的第一个月和最后一个月,然后以该形式转换月份。
  • @AlexBlack 我同意它会更快使用 SQL。
猜你喜欢
  • 2018-01-10
  • 2020-07-18
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2021-11-07
相关资源
最近更新 更多