>  기사  >  백엔드 개발  >  Laravel에서 아래쪽에 빈 값과 비어 있지 않은 값을 내림차순으로 정렬하는 행

Laravel에서 아래쪽에 빈 값과 비어 있지 않은 값을 내림차순으로 정렬하는 행

WBOY
WBOY원래의
2024-09-07 08:31:02996검색

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

데이터베이스 작업을 할 때 일부 필드가 비어 있거나 NULL인 상황에 직면하는 것이 일반적입니다. 자주 발생하는 문제 중 하나는 빈 필드가 있는 행이 결과 집합의 맨 아래에 표시되고, 비어 있지 않은 값이 있는 행이 의미 있는 방식(예: 내림차순)으로 정렬되도록 레코드를 정렬하는 방법입니다. 이번 포스팅에서는 실용적인 예를 사용하여 Laravel에서 이를 달성하는 방법을 보여드리겠습니다.

대본

활동에 대한 참가자 테이블이 있고 각 참가자는 참가자가 활동에 참석한 시간을 기록하는 Attend_at 타임스탬프를 가질 수도 있고 가지지 않을 수도 있다고 가정해 보겠습니다. 모든 참가자를 나열하고 다음과 같은 방식으로 정렬하려고 합니다.

  • 참석한 참가자(즉, Attention_at이 비어 있지 않음)가 가장 최근 참석자 순으로 정렬되어 가장 먼저 나타납니다.
  • 참석하지 않은 참가자(즉, Attention_at이 비어 있거나 NULL임)가 마지막에 나타납니다.

문제

기본적으로 Laravel의 최신() 메소드는 주어진 열을 기준으로 내림차순으로 레코드를 정렬합니다. 그러나 일부 레코드에 NULL 또는 빈 값이 있는 경우는 처리하지 않습니다. 간단히 사용하는 경우:

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

타임스탬프를 사용하여 참가자를 정렬하지만 NULL 값을 맨 아래로 이동하지는 않습니다.

해결책: orderByRaw 사용

orderByRaw() 메소드를 사용하여 원하는 정렬을 달성할 수 있습니다. 이를 통해 원시 SQL 표현식을 사용하여 사용자 정의 정렬 논리를 작성할 수 있습니다. 이 경우 Attention_at가 NULL인지 여부에 따라 정렬한 다음 NULL이 아닌 값에 대해서는 Attention_at의 내림차순으로 정렬하겠습니다.

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'):
    • Attend_at IS NULL: Attend_at가 NULL인 행에 대해서는 true(또는 1)를 반환하고 그렇지 않으면 false(또는 0)를 반환합니다. 이렇게 하면 하단에 NULL 값이 효과적으로 배치됩니다.
    • Attend_at DESC: NULL 값을 처리한 후 비어 있지 않은 Attention_at 값이 있는 나머지 행을 내림차순으로 정렬합니다. 즉, 가장 최근 참석이 먼저 표시됩니다.

최종 출력

그런 다음 map() 함수를 사용하여 학생 ID, 이름, 상태 등의 필드를 포함하여 원하는 구조로 출력 형식을 지정하고 Attend_at 타임스탬프를 사람이 읽을 수 있는 형식 또는 '-'(있는 경우)로 변환합니다. 비어있습니다.

이 접근 방식의 이점

  • 성능: 이 접근 방식은 SQL의 정렬 기능을 활용하여 대규모 데이터 세트에 효율적입니다.
  • 가독성: 원시 SQL 표현식과 함께 orderByRaw()를 사용하면 코드가 간결하고 이해하기 쉽습니다.
  • 유연성: 이 논리를 쉽게 확장하여 다른 필드별로 정렬하거나 더 복잡한 조건을 포함할 수 있습니다.

결론

Laravel에서 NULL 또는 빈 값을 사용한 정렬을 처리하는 것은 항상 완전하지 않을 수 있는 데이터를 작업할 때 일반적인 작업입니다. Attention_at IS NULL, Attention_at DESC와 같은 SQL 표현식과 함께 orderByRaw() 메서드를 사용하면 나머지 데이터를 의미 있는 방식으로 정렬하는 동시에 NULL 값이 있는 행이 맨 아래에 나타나는지 쉽게 확인할 수 있습니다.

이 방법은 이 예와 같이 출석을 처리하는 시나리오에서 특히 유용하지만 일부 데이터 필드가 누락될 수 있는 다른 많은 상황에도 적용될 수 있습니다. 이 접근 방식을 사용하면 사용자에게 애플리케이션의 기록을 더욱 명확하고 직관적으로 표시할 수 있습니다.

즐거운 코딩하세요!

위 내용은 Laravel에서 아래쪽에 빈 값과 비어 있지 않은 값을 내림차순으로 정렬하는 행의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.