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

WBOY
リリース: 2024-09-07 08:31:02
オリジナル
1239 人が閲覧しました

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、Attended_at DESC などの SQL 式とともに使用すると、残りのデータを意味のある方法で並べ替えながら、NULL 値を持つ行が最後に表示されるように簡単に確認できます。

このメソッドは、この例に示すように、出席状況を扱うシナリオで特に役立ちますが、一部のデータ フィールドが欠落している可能性がある他の多くの状況にも適用できます。このアプローチを使用すると、アプリケーション内のレコードをより明確かつ直感的に表示できるようにユーザーに提供できます。

コーディングを楽しんでください!

以上がLaravelで空の値が一番下にあり、空ではない値がある行を降順で並べ替えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート