问题描述
我尝试将 orderBy(hr_workers.l_name)
放在 get()
之前,但它不起作用.. 也尝试将它放在 $workers 上但仍然不起作用......我不知道为什么不在职的...
任何人都可以帮助我所有答案必须提前感谢
我希望结果按姓氏字母顺序排列
public function show6($id)
{
$workers = DB::table('hr_workers')
->select('wrk_id','f_name','m_name','l_name');
$attendance = DB::table('payroll_daily_attendance')->where('payroll_daily_id',$id)
->select('payroll_daily_attendance.*','l_name','m_name')
->rightjoinSub($workers,'worker',function($join){
$join->on('payroll_daily_attendance.wrk_id','=','worker.wrk_id');
});
$payroll = DB::table('payroll_daily_details')
->select('payroll_daily_details.*','wrk_id','attendance.*')
->rightjoinSub($attendance,'attendance',function($join){
$join->on('payroll_daily_details.payroll_daily_id','attendance.payroll_daily_id');
})
->get();
$fetch = [];
foreach($payroll as $key){
if(!isset($fetch[$key->wrk_id]['total_ot']) && !isset($fetch[$key->wrk_id]['total_days']) && !isset($fetch[$key->wrk_id]['grand_total'])){
$fetch[$key->wrk_id]['total_ot'] = 0;
$fetch[$key->wrk_id]['total_days'] = 0;
$fetch[$key->wrk_id]['total_allowance'] = 0;
$fetch[$key->wrk_id]['grand_total'] = 0;
}
$fetch[$key->wrk_id]['wrk_id'] = $key->wrk_id;
$fetch[$key->wrk_id]['f_name'] = $key->f_name;
$fetch[$key->wrk_id]['l_name'] = $key->l_name;
$fetch[$key->wrk_id]['m_name'] = $key->m_name;
$fetch[$key->wrk_id]['total_days'] += $key->reg_hour + $key->adj_hour;
$fetch[$key->wrk_id]['total_allowance'] += $key->allowance;
}
return $fetch;
}
解决方法
因为可以有多个 l_name
值与 wrk_id
数组中的每个 $fetch
相关联,查询中的任何 l_name
排序都将被覆盖,因为 {正在生成 {1}} 数组。您需要在返回之前按 $fetch
值对 $fetch
数组进行排序,您可以使用此方法(派生自 this Q&A)来完成此操作:
l_name
,
使用:
$payroll = DB::table('payroll_daily_details')
->select('payroll_daily_details.*','wrk_id','f_name','m_name','l_name','attendance.*')
->rightjoinSub($attendance,'attendance',function($join){
$join->on('payroll_daily_details.payroll_daily_id','=','attendance.payroll_daily_id');
})
->orderBy('l_name')
->get();
,
正如 Euclides Cardoso Junior 所强调的那样。我相信要让您的结果按字母顺序排列,您需要将第二个参数放入 orderBy 函数以包含要遵循的顺序并按函数放置分组。检查下面的代码;$yourQuery->orderBy('l_name','asc') ->groupBy('l_name') ->get();
希望对您有所帮助。