Сортировка порядка данных по длительности между start_date и end_date

#laravel #laravel-7

#laravel #laravel-7

Вопрос:

Я использую Laravel 7. У меня есть таблица с именем assistances, в которой есть несколько столбцов и эти два столбца:

 - start_date
- end_date
  

Я хотел бы отсортировать порядок данных по длительности между start_date и end_date:

  $query = Assistance::join('users', 'assistances.user_id', '=', 'users.id')
        ->select('assistances.*')
        ->orderBy('duration between start_date and end_date');
 ;
  

Как я могу это сделать?

Ответ №1:

Пожалуйста, попробуйте следующее — имейте в виду, что это не очень эффективно

DATEDIFF возвращает дни между двумя датами. Вы также можете использовать TIMESTAMPDIFF which принимает первый параметр, такой как ‘hour’, где вы можете получить более детальный контроль

 $query = Assistance::join('users', 'assistances.user_id', '=', 'users.id')
        ->select('assistances.*')
        ->orderBy(DB::raw('DATEDIFF(start_date, end_date)'))
        ->get();
  

Пожалуйста, также use DB; в вашем классе.

Комментарии:

1. чтобы выбрать, является ли это ASC или DESC, я использовал orderByRaw ->orderByRaw(DB::raw("DATEDIFF(start_date, end_date) desc"))