0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】もう迷わない!get()・first()で0件データをスマートに処理する方法

Posted at

はじめに

みなさんこんにちは!
TOMON_9912です!

Laravelを使っているとクエリビルダを使ってこのようにデータ取得しませんか?

->get();
->first();

ですが、このようなデータ取得をする時にデータ取得結果が0件だった場合という条件分岐を書くことがあると思います。その時、書き方に困ったので備忘録的に記録しておきたいと思います。

first()の場合

どのようなデータを扱っているのか?

first()メソッドは、クエリの結果セットから最初の1件のレコードを取得する際に使用します。結果が0件の場合、nullを返します。
取得したデータは以下のような構造になっています。

stdClass Object
├─ id: 1
├─ name: "山田 太郎"
└─ email: "taro@example.com"

0件取得時の書き方

first()で取得した結果がnullかどうかで判定します。

$user = DB::table('users')->where('id', 1)->first();

if ($user === null) {
    // ユーザーが見つからなかった場合の処理
    echo "ユーザーが見つかりませんでした。";
} else {
    // ユーザーが見つかった場合の処理
    echo "ユーザー名: " . $user->name;
}

get()の場合

どのようなデータを扱っているのか?

get()メソッドは、クエリの結果セットからすべてのレコードを取得する際に使用します。結果が0件の場合、空のIlluminate\Support\Collectionインスタンスを返します。

インスタンスには、以下のような構造でデータが入っています。

Collection (Illuminate\Support\Collection)
│
├─ 0: stdClass Object
│   ├─ id: 1
│   ├─ name: "山田 太郎"
│   └─ email: "taro@example.com"
│
├─ 1: stdClass Object
│   ├─ id: 2
│   ├─ name: "佐藤 花子"
│   └─ email: "hanako@example.com"
│
└─ 2: stdClass Object
    ├─ id: 3
    ├─ name: "鈴木 次郎"
    └─ email: "jiro@example.com"

0件取得時の書き方

get()で取得した結果が空のコレクションかどうかは、isEmpty()メソッドやcount()メソッドで判定できます。

isEmpty()メソッドを使う方法

$users = DB::table('users')->where('status', 1)->get();

if ($users->isEmpty()) {
    // ユーザーが見つからなかった場合の処理
    echo "該当するユーザーはいませんでした。";
} else {
    // ユーザーが見つかった場合の処理
    foreach ($users as $user) {
        echo "ユーザー名: " . $user->name . "\n";
    }
}

count()メソッドを使う方法

$products = DB::table('products')->where('stock', 0)->get();

if ($products->count() === 0) {
    // 商品が見つからなかった場合の処理
    echo "在庫切れの商品はありません。";
} else {
    // 商品が見つかった場合の処理
    echo "在庫切れの商品が" . $products->count() . "件あります。\n";
    foreach ($products as $product) {
        echo "商品名: " . $product->name . "\n";
    }
}

まとめ

Laravelのクエリビルダでデータ取得時に結果が0件だった場合の条件分岐は、取得メソッドによって扱いが異なります。

  • first()の場合: 結果が0件だとnullを返すため、=== nullで判定します

  • get()の場合: 結果が0件だと空のコレクションを返すため、isEmpty()メソッドやcount() === 0で判定します

これらの違いを理解しておくと、より堅牢なコードを書くことができますね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?