データベースを操作する場合、一部のフィールドが空または 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、attend_at DESC などの SQL 式とともに使用すると、残りのデータを意味のある方法で並べ替えながら、NULL 値を持つ行が一番下に表示されるように簡単に確認できます。
このメソッドは、この例に示すように、出席状況を扱うシナリオで特に役立ちますが、一部のデータ フィールドが欠落している可能性がある他の多くの状況にも適用できます。このアプローチを使用すると、アプリケーション内のレコードをより明確かつ直感的に表示できるようにユーザーに提供できます。
コーディングを楽しんでください!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3