Laravel foreach сортировать по, сначала показывать определенные записи

У меня есть цикл foreach, и я хочу отсортировать список, показывая сначала записи, где is_active имеет значение null, а затем все остальное.

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

Любые идеи?


person Community    schedule 16.11.2018    source источник
comment
вы хотите показать только is_active = null или вы хотите заказать по убыванию is_active?   -  person simonecosci    schedule 16.11.2018
comment
я хочу показать записи, где is_active null вверху. Тогда is_active имеет значение, они ниже нулевых записей.   -  person    schedule 16.11.2018
comment
$registrations->orderByDesc('is_active')->orderByDesc(...) ->get() должен сделать это   -  person simonecosci    schedule 16.11.2018
comment
для чего нужна вторая сортировка?   -  person    schedule 16.11.2018
comment
в случае одного и того же is_active... если 2 записи разделяют 'is_active' (например, null), тогда будет использоваться второй orderBy   -  person simonecosci    schedule 16.11.2018
comment
comment
@simonecosci этого не делает. Запись is_active по-прежнему находится снизу, а не сверху   -  person    schedule 16.11.2018


Ответы (2)


прежде всего сделайте запрос, который возвращает записи в порядке возрастания в соответствии со значением 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
person Ram Bhandari    schedule 16.11.2018
comment
Работает ли это решение или нет, зависит от используемой системы баз данных. Не все СУБД используют один и тот же порядок по умолчанию, а некоторые даже допускают особый порядок обработки значений NULL. - person Namoshek; 16.11.2018

Вы можете попробовать так,

 // 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)
person Mayank Majithya    schedule 16.11.2018