【问题标题】:Laravel foreach sort by, show specific records firstLaravel foreach 排序,先显示具体记录
【发布时间】:2019-04-19 14:37:33
【问题描述】:

我有一个 foreach 循环,我想通过先显示 is_active 为 null 的记录,然后再显示其他任何内容来对列表进行排序。

    @foreach ($registrations->sortBy('is_active') as $registration)

有什么想法吗?

【问题讨论】:

  • 你想只显示 is_active = null 还是你想通过 is_active 降序排序?
  • 我想在顶部显示 is_active null 的记录。那么is_active是否有值,它们在null记录的下方。
  • $registrations->orderByDesc('is_active')->orderByDesc(...) ->get() 应该这样做
  • 第二个排序依据是什么?
  • 如果是相同的is_active ...如果2条记录共享'is_active'(例如null),则将使用第二个orderBy

标签: laravel eloquent laravel-blade


【解决方案1】:

首先进行一个查询,根据is_active值以升序返回记录(我假设0代表不活动,1代表活动

查询应该是:

$records=DB::table('table_name')->orderBy('is_active','asc')->all();
return view('viewblade')->with('records',$records);

现在您可以在 viewblade 中显示数据,例如:

@foreach($records as $record){
   {{$record->fieldName}}
}
@endforeach

【讨论】:

  • 此解决方案是否有效取决于所使用的数据库系统。并非所有 DBMS 都使用相同的默认排序,有些甚至允许对 NULL 值进行特殊排序处理。
【解决方案2】:

你可以试试这个方法,

 // specify second_column that will be used if multiple null values found

 $registrations = $registrations->sortByDesc('second_column')->sortBy('is_active');

 @foreach ($registrations->all() as $registration)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多