「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravelで空の値が一番下にあり空でない値がある行を降順で並べ替える

Laravelで空の値が一番下にあり空でない値がある行を降順で並べ替える

2024 年 11 月 6 日に公開
ブラウズ:710

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

データベースを操作する場合、一部のフィールドが空または NULL になる状況がよく発生します。よく発生する課題の 1 つは、空のフィールドを含む行が結果セットの最後に表示され、空ではない値を含む行が意味のある方法 (降順など) で並べられるようにレコードを並べ替える方法です。この投稿では、実用的な例を使用して、Laravel でこれを実現する方法を説明します。

シナリオ

アクティビティの参加者のテーブルがあり、各参加者には、参加者がアクティビティにいつ参加したかを記録する、attended_at タイムスタンプがある場合とない場合があるとします。すべての参加者を次のように並べ替えてリストしたいとします:

  • 出席した参加者 (つまり、Attended_at が空ではない) が最初に表示され、最新の出席順に並べ替えられます。
  • 参加していない参加者 (つまり、Attended_at が空または NULL) は最後に表示されます。

問題

デフォルトでは、Laravelのlatest()メソッドはレコードを指定された列で降順に並べ替えます。ただし、一部のレコードに NULL または空の値がある場合は処理されません。単純に使用する場合:

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

タイムスタンプを使用して参加者を並べ替えますが、NULL 値は最後に移動しません。

解決策: orderByRaw の使用

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();

クエリを細分化する

  • orderByRaw('attended_at IS NULL、attended_at DESC'):
    • Attended_at IS NULL: これは、attended_at が NULL の行には true (または 1) を返し、それ以外の場合は false (または 0) を返します。これにより、効果的に NULL 値が最後に配置されます。
    • Attended_at DESC: NULL 値を処理した後、空ではないAttended_at値を持つ残りの行を降順で並べ替えます。つまり、最新の出席者が最初に表示されます。

最終出力

次に、map() 関数を使用して、student_id、name、status などのフィールドを含む出力を目的の構造にフォーマットし、attended_at タイムスタンプを人間が判読できる形式、または「-」(フォーマットの場合)に変換します。空の。

このアプローチの利点

  • パフォーマンス: このアプローチは SQL の並べ替え機能を活用し、大規模なデータセットを効率的に処理します。
  • 可読性: 生の SQL 式で orderByRaw() を使用すると、コードが簡潔で理解しやすくなります。
  • 柔軟性: このロジックを簡単に拡張して、他のフィールドで並べ替えたり、より複雑な条件を含めたりできます。

結論

Laravel での NULL または空の値によるソートの処理は、必ずしも完全ではない可能性のあるデータを扱う場合の一般的なタスクです。 orderByRaw() メソッドを、Attended_at IS NULL、attend_at DESC などの SQL 式とともに使用すると、残りのデータを意味のある方法で並べ替えながら、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