데이터베이스로 작업할 때 일부 필드가 비어 있거나 NULL인 상황에 직면하는 것이 일반적입니다. 자주 발생하는 문제 중 하나는 빈 필드가 있는 행이 결과 집합의 맨 아래에 표시되고, 비어 있지 않은 값이 있는 행이 의미 있는 방식(예: 내림차순)으로 정렬되도록 레코드를 정렬하는 방법입니다. 이번 포스팅에서는 실용적인 예제를 사용하여 Laravel에서 이를 달성하는 방법을 보여드리겠습니다.
활동에 대한 참가자 테이블이 있고 각 참가자는 참가자가 활동에 참석한 시간을 기록하는 Attend_at 타임스탬프를 가질 수도 있고 가지지 않을 수도 있다고 가정해 보겠습니다. 모든 참가자를 나열하고 다음과 같은 방식으로 정렬하려고 합니다.
기본적으로 Laravel의 최신() 메소드는 주어진 열을 기준으로 내림차순으로 레코드를 정렬합니다. 그러나 일부 레코드에 NULL 또는 빈 값이 있는 경우는 처리하지 않습니다. 간단히 사용하는 경우:
return $this ->participants() ->with('user') ->latest('attended_at') ->get();
타임스탬프를 사용하여 참가자를 정렬하지만 NULL 값을 맨 아래로 이동하지는 않습니다.
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();
그런 다음 map() 함수를 사용하여 Student_id, 이름 및 상태와 같은 필드를 포함하여 원하는 구조로 출력 형식을 지정하고 Attend_at 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하거나 '-'(있는 경우)로 변환합니다. 비어 있는.
Laravel에서 NULL 또는 빈 값을 사용한 정렬을 처리하는 것은 항상 완료되지 않을 수 있는 데이터로 작업할 때 일반적인 작업입니다. Attention_at IS NULL, Attention_at DESC와 같은 SQL 표현식과 함께 orderByRaw() 메서드를 사용하면 나머지 데이터를 의미 있는 방식으로 정렬하는 동시에 NULL 값이 있는 행이 맨 아래에 나타나는지 쉽게 확인할 수 있습니다.
이 방법은 이 예에 표시된 것처럼 출석을 처리하는 시나리오에서 특히 유용하지만 일부 데이터 필드가 누락될 수 있는 다른 많은 상황에도 적용될 수 있습니다. 이 접근 방식을 사용하면 사용자에게 애플리케이션의 레코드를 더욱 명확하고 직관적으로 표시할 수 있습니다.
즐거운 코딩하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3