«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Сортировка строк с пустыми значениями внизу и непустыми значениями в порядке убывания в Laravel

Сортировка строк с пустыми значениями внизу и непустыми значениями в порядке убывания в Laravel

Опубликовано 6 ноября 2024 г.
Просматривать:689

Sorting Rows with Empty Values at the Bottom and Non-Empty Values in Descending Order in Laravel

При работе с базами данных часто встречаются ситуации, когда некоторые поля могут быть пустыми или NULL. Одна из часто возникающих проблем заключается в том, как отсортировать записи так, чтобы строки с пустыми полями отображались внизу набора результатов, а строки с непустыми значениями упорядочивались осмысленным образом (например, по убыванию). В этом посте я покажу вам, как этого добиться в Laravel, на практическом примере.

Сценарий

Предположим, у вас есть таблица участников какого-либо действия, и каждый участник может иметь или не иметь метку времени «atted_at», которая записывает, когда участник посетил действие. Вы хотите составить список всех участников, отсортировав их таким образом:

  • Присутствовавшие участники (т. е. поле «atted_at» не пусто) отображаются первыми и отсортированы по последней посещаемости.
  • Неприсутствовавшие участники (т. е. поле «atent_at» пусто или имеет значение NULL) отображаются последними.

Проблема

По умолчанию метод late() в Laravel сортирует записи по заданному столбцу в порядке убывания. Однако он не обрабатывает случай, когда некоторые записи имеют NULL или пустые значения. Если вы просто используете:

return $this
    ->participants()
    ->with('user')
    ->latest('attended_at')
    ->get();

Он упорядочит участников по временной метке, но не переместит значения NULL вниз.

Решение: использование orderByRaw

Мы можем добиться желаемой сортировки, используя метод 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();

Разбивка запроса

  • orderByRaw('attended_at IS NULL, Attended_at DESC'):
    • «atent_at IS NULL»: вернет true (или 1) для строк, где «tent_at» имеет значение NULL, и false (или 0) в противном случае. Это фактически помещает значения NULL внизу.
    • «atted_at DESC»: после обработки значений NULL оставшиеся строки с непустыми значениями «atent_at» сортируются в порядке убывания, что означает, что самая последняя посещаемость будет показана первой.

Окончательный результат

Затем функция map() используется для форматирования вывода в желаемую структуру, включая такие поля, как Student_id, имя и статус, а также преобразования временной метки «attent_at» в удобочитаемый формат или «-», если это так. пустой.

Преимущества этого подхода

  • Производительность: Этот подход использует возможности сортировки SQL, что делает его эффективным для больших наборов данных.
  • Читаемость: Использование orderByRaw() с необработанным выражением SQL делает код кратким и простым для понимания.
  • Гибкость: Вы можете легко расширить эту логику для сортировки по другим полям или включения более сложных условий.

Заключение

Обработка сортировки по NULL или пустым значениям в Laravel — распространенная задача при работе с данными, которые не всегда могут быть полными. Используя метод orderByRaw() с таким выражением SQL, как «tent_at IS NULL», «tent_at DESC», вы можете легко гарантировать, что строки со значениями NULL появятся внизу, при этом сохраняя осмысленную сортировку остальных данных.

Этот метод особенно полезен в сценариях, где вы имеете дело с посещаемостью, как показано в этом примере, но его можно применить и во многих других ситуациях, когда некоторые поля данных могут отсутствовать. Благодаря такому подходу вы сможете предоставить своим пользователям более четкое и интуитивно понятное отображение записей в вашем приложении.

Удачного программирования!

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/nasrulhazim/sorting-rows-with-empty-values-at-the-bottom-and-non-empty-values-in-descending-order-in-laravel- 2ao9? 1Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3