Laravel Blade - orderBy

Laravel Blade - orderBy

我的 blade 模板中有这个 foreach 循环。

@foreach ($employee->projects->groupBy('stage') as $stage => $project)
  <tbody>
    <td>{{ $stage }}</td>
    <td class="text-center">{{ count($project) }}</td>
  </tbody>
@endforeach

它在哪里找到员工参与的所有项目,并按他们所处的阶段(等待、进行中、启动)对它们进行分组。然后它列出了阶段和每个阶段的数量。这非常有效,但它们的顺序不正确。我希望它们处于等待、进行中和启动状态。目前它处于启动、等待、进行中。

如何在自定义订单中订购它们?

SQL应该是

  SELECT ... FROM projects GROUP BY stage 
    ORDER BY stage = 'Waiting' DESC, stage = 'In Progress', ...

可能您需要使用类似于此的方法

  ->order_by(DB::expr("stage = 'Waiting' DESC"))->order_by(...)

好的,明白了。这是我所做的...

$projects = $employee->projects()
        ->groupBy('stage')
        ->select('stage', DB::raw('count(*) as total'))
        ->orderByRaw('case 
            when stage = "Waiting" then 1 
            when stage = "In Progress" then 2 
            when stage = "Launched" then 3
            end')
        ->get();

然后在我的 blade 模板中,我做了...

@foreach ($projects as $project)
  <tbody>
    <td>{{ $project->stage }}</td>
    <td class="text-center">{{ $project->total }}</td>
  </tbody>
@endforeach

希望这对其他人有帮助。