#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"))