データベースを使用する場合、一部のフィールドが空または NULL になる状況がよく発生します。よく発生する課題の 1 つは、空のフィールドを含む行が結果セットの最後に表示され、空ではない値を含む行が意味のある方法 (降順など) で並べられるようにレコードを並べ替える方法です。この投稿では、実用的な例を使用して、Laravel でこれを実現する方法を説明します。
アクティビティの参加者のテーブルがあり、各参加者は、参加者がアクティビティに参加した時間を記録する、attended_at タイムスタンプを持っている場合と持っていない場合があるとします。すべての参加者を次のような方法で並べ替えてリストしたいとします。
デフォルトでは、Laravel のlatest() メソッドはレコードを指定された列で降順に並べ替えます。ただし、一部のレコードに NULL または空の値がある場合は処理されません。単純に使用する場合:
return $this ->participants() ->with('user') ->latest('attended_at') ->get();
タイムスタンプを使用して参加者を並べ替えますが、NULL 値は最後に移動しません。
orderByRaw() メソッドを使用して、目的の並べ替えを実現できます。これにより、生の SQL 式を使用してカスタムの並べ替えロジックを作成できるようになります。この場合、attended_at が NULL かどうかで並べ替え、NULL 以外の値については、Attended_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、name、status などのフィールドを含む出力を目的の構造にフォーマットし、attended_at タイムスタンプを人間が判読できる形式、または「-」(可読形式の場合)に変換します。空です。
Laravel で NULL または空の値を使用した並べ替えを処理することは、必ずしも完了しているとは限らないデータを扱う場合の一般的なタスクです。 orderByRaw() メソッドを、Attended_at IS NULL、Attended_at DESC などの SQL 式とともに使用すると、残りのデータを意味のある方法で並べ替えながら、NULL 値を持つ行が最後に表示されるように簡単に確認できます。
このメソッドは、この例に示すように、出席状況を扱うシナリオで特に役立ちますが、一部のデータ フィールドが欠落している可能性がある他の多くの状況にも適用できます。このアプローチを使用すると、アプリケーション内のレコードをより明確かつ直感的に表示できるようにユーザーに提供できます。
コーディングを楽しんでください!
以上がLaravelで空の値が一番下にあり、空ではない値がある行を降順で並べ替えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。