从时间戳中获取每月数据并按同月排序
Get monthly data from timestamp and sort by the same month
我试图按每月总持续时间显示table,所以我确实按时间戳的相同每月数据的持续时间排序,但我做不到。
我的目标是通过 return 值创建对象或数组值的 table。
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--- | xxxxxxxx |
----2--- | xxxxxxxx |
----3--- | xxxxxxxx |
...
---11--- | xxxxxxxx |
---12--- | xxxxxxxx |
您可以创建关联数组并按键排序
$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();
我试图按每月总持续时间显示table,所以我确实按时间戳的相同每月数据的持续时间排序,但我做不到。
我的目标是通过 return 值创建对象或数组值的 table。
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--- | xxxxxxxx |
----2--- | xxxxxxxx |
----3--- | xxxxxxxx |
...
---11--- | xxxxxxxx |
---12--- | xxxxxxxx |
您可以创建关联数组并按键排序
$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();