Порядок красноречивой коллекции laravel: сначала ноль, а затем поданное значение - PullRequest
0 голосов
/ 07 мая 2019

У меня есть $items с этим Illuminate\Database\Eloquent\Collection экземпляром.Результат dd($items->toArray()) равен

array:3 [▼
  0 => array:3 [▼
    "id" => 10
    "start_date" => "Jan 1997"
    "end_date" => "Jan 2000"
  ]
  1 => array:3 [▼
    "id" => 9
    "start_date" => "Jan 2000"
    "end_date" => "Jan 2003"
  ]
  2 => array:3 [▼
    "id" => 6
    "start_date" => "Jan 2007"
    "end_date" => ""
  ]
]

Я хочу заказать по дате окончания.Сначала пустые значения, чем desc, как это

array:3 [▼
  0 => array:3 [▼
    "id" => 6
    "start_date" => "Jan 2007"
    "end_date" => ""
  ]
  1 => array:3 [▼
    "id" => 9
    "start_date" => "Jan 2000"
    "end_date" => "Jan 2003"
  ]
  2 => array:3 [▼
    "id" => 10
    "start_date" => "Jan 1997"
    "end_date" => "Jan 2000"
  ]
]

Как это сделать правильно.Я пытаюсь $items->sortByDesc('end_date'), но в этом случае пустые значения это конец

1 Ответ

1 голос
/ 07 мая 2019

Вы должны реализовать свою собственную функцию сортировки, как указано в документации

вы можете сделать что-то вроде

$items = $items->sort(function($a, $b) {
    if ($a->end_date == '') { return -1; } // this will set the empty value always before the other
    // pseudo code
    $firstDate = \Carbon::parse($a->end_date);
    $secondDate = \Carbon::parse($b->end_date);
    if ($firstDate->lessThan($secondDate)) { return - 1; }
    if ($firstDate->equalTo($secondDate)) { return 0; }
    return 1;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...