При работе с базами данных часто встречаются ситуации, когда некоторые поля могут быть пустыми или NULL. Одна из часто возникающих проблем заключается в том, как отсортировать записи так, чтобы строки с пустыми полями отображались внизу набора результатов, а строки с непустыми значениями упорядочивались осмысленным образом (например, по убыванию). В этом посте я покажу вам, как этого добиться в Laravel, на практическом примере.
Предположим, у вас есть таблица участников какого-либо действия, и каждый участник может иметь или не иметь метку времени «atted_at», которая записывает, когда участник посетил действие. Вы хотите составить список всех участников, отсортировав их таким образом:
По умолчанию метод late() в Laravel сортирует записи по заданному столбцу в порядке убывания. Однако он не обрабатывает случай, когда некоторые записи имеют NULL или пустые значения. Если вы просто используете:
return $this ->participants() ->with('user') ->latest('attended_at') ->get();
Он упорядочит участников по временной метке, но не переместит значения NULL вниз.
Мы можем добиться желаемой сортировки, используя метод orderByRaw(). Это позволяет нам писать собственную логику сортировки, используя необработанные выражения SQL. В этом случае мы упорядочим по тому, имеет ли значение «atent_at» NULL, а затем упорядочим по «attent_at» в порядке убывания для значений, отличных от NULL.
Вот как вы можете написать этот запрос в Laravel:
return $this ->participants() ->with('user') ->orderByRaw('attended_at IS NULL, attended_at DESC') ->get() ->map(function (ActivityParticipant $participant) { return [ 'metric_number' => data_get($participant, 'user.student_id'), 'name' => data_get($participant, 'user.name'), 'status' => data_get($participant, 'status'), 'attended_at' => data_get($participant, 'attended_at', '-'), ]; })->toArray();
Затем функция map() используется для форматирования вывода в желаемую структуру, включая такие поля, как Student_id, имя и статус, а также преобразования временной метки «attent_at» в удобочитаемый формат или «-», если это так. пустой.
Обработка сортировки по NULL или пустым значениям в Laravel — распространенная задача при работе с данными, которые не всегда могут быть полными. Используя метод orderByRaw() с таким выражением SQL, как «tent_at IS NULL», «tent_at DESC», вы можете легко гарантировать, что строки со значениями NULL появятся внизу, при этом сохраняя осмысленную сортировку остальных данных.
Этот метод особенно полезен в сценариях, где вы имеете дело с посещаемостью, как показано в этом примере, но его можно применить и во многих других ситуациях, когда некоторые поля данных могут отсутствовать. Благодаря такому подходу вы сможете предоставить своим пользователям более четкое и интуитивно понятное отображение записей в вашем приложении.
Удачного программирования!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3