首页 > 解决方案 > 从时间戳获取每月数据并按同一月份排序

问题描述

我试图按每月总持续时间显示表格,所以我确实按时间戳的相同每月数据的持续时间排序,但我做不到。

我的目标是通过返回一个对象或数组值的值来创建一个表。

public function monthlyResult(Request $request = null)
{
  $user_id = Auth::user()->id;

         if($request){
            $year = $request->year;
            $month = $request->month;
         }
         else{
            $year = date('Y');
         }


         $monthlyResult = DB::table('workings')
        ->where('user_id', $user_id)
        ->whereYear('created_at', $year)
        ->orwhere(function ($query) use($user_id, $year) {
            $query->where('user_id', $user_id)
            ->whereYear('deleted_at', $year);
        })
        ->get();

        foreach($monthlyResult as $mResult){
          $month = date('n', strtotime($mResult->created_at));
          $duration = $mResult->duration;

        ---- code ----
        }
   return ;
}

月 | 总时长 |

----1--- | xxxxxxx |

----2--- | xxxxxxx |

----3--- | xxxxxxx |

...

---11--- | xxxxxxx |

---12--- | xxxxxxx |

标签: phplaravellaravel-5query-builder

解决方案


您可以创建关联数组并按键排序

$results = [];

foreach($monthlyResult as $mResult){
   $month = date('n', strtotime($mResult->created_at));
   $results[$month] = (isset($results[$month])) ? ($results[$month] + $mResult->duration) : $mResult->duration ;
}

//now sort $results based on key
ksort($results);

正如@C2486 提到的,您可以使用直接对记录进行排序orderBy

$monthlyResult = DB::table('workings')
        ->where('user_id', $user_id)
        ->whereYear('created_at', $year)
        ->orwhere(function ($query) use ($user_id, $year) {
            $query->where('user_id', $user_id)
            ->whereYear('deleted_at', $year);
        })
        ->orderBy(DB::raw('month(created_at)'))
        ->get();

推荐阅读