【问题标题】:Laravel Blade - orderByLaravel Blade - orderBy
【发布时间】:2017-03-24 01:23:21
【问题描述】:

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

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

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

如何按我的自定义顺序订购它们?

【问题讨论】:

    标签: php eloquent sql-order-by laravel-blade


    【解决方案1】:

    SQL应该是

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

    可能你需要类似这样的用法

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

    【讨论】:

    • 嗨,我可以在刀片模板中进行该查询吗?我认为这必须在控制器中,对吧?我在刀片模板中有一个 foreach 循环需要订购。
    【解决方案2】:

    好的,想通了。这就是我所做的......

    $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();
    

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

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

    希望这对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-07-10
      • 2017-04-14
      • 2020-12-17
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2015-07-03
      相关资源
      最近更新 更多