微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我尝试将 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();

希望对您有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?