如何使用foreach循环在laravel控制器返回值中按姓氏排序

如何使用foreach循环在laravel控制器返回值中按姓氏排序,laravel,sorting,join,subquery,Laravel,Sorting,Join,Subquery,我试图在get()之前放置orderBy(hr\u workers.l\u name),但它不起作用。。还试图把它放在$workers上,但仍然不起作用。。。我不知道为什么不工作。。。 任何人都可以帮助我所有的答案必须感谢提前感谢 我希望结果按姓氏字母顺序排列 public function show6($id) { $workers = DB::table('hr_workers') ->select('wrk_id','f_name','m_name','l_

我试图在
get()
之前放置
orderBy(hr\u workers.l\u name)
,但它不起作用。。还试图把它放在$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.*','f_name','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','f_name','m_name','l_name','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;


    }
使用:


正如小欧几里德·卡多佐所强调的那样。我相信,要按字母顺序排列结果,您需要将第二个参数放在orderBy函数中,以包含要遵循的顺序,还需要将group by函数放在后面。检查下面的代码
$yourkquery->orderBy('l_name','asc')->groupBy('l_name')->get()


希望这会有所帮助。

因为在
$fetch
数组中可以有多个与每个
wrk\u id
关联的
l\u name
值,查询中的任何
l\u name
排序都将被覆盖,因为
$fetch
数组的生成方式不同。在返回
$fetch
数组之前,需要按照
l\u name
值对数组进行排序,您可以使用此方法执行此操作(派生自):

usort($fetch,function($a,$b){return$a['l_name']]$b['l_name'];});

hr\u workers
在查询的顶层不是有效的别名,通常会忽略子查询中的无限制排序。但是您应该能够在顶层
orderBy('l_name')
我可以把它放在哪里?在
$payroll=…
查询中,在
->get()
之前,一些
wrk_id
值是否有多个
l_name
与它们关联?这就是原因。在这种情况下,您需要按照
l_name
值对
$fetch
进行排序,例如参见
return$fetch
use
usort($fetch,function($a,$b){return$a['l_name']$b['l_name'];})不工作兄弟…你能发送更多关于错误的信息吗?它显示数据,但不按l_名称排序
$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();