1. ホーム
  2. php

[解決済み] Eloquent ->first() if ->exists()

2023-08-09 06:51:04

質問

テーブルの中で条件にマッチする最初の行を取得したい。

User::where('mobile', Input::get('mobile'))->first()

うまくいくのですが、条件が一致しない場合はExceptionを投げてしまいます。

ErrorException
Trying to get property of non-object

現在、私はこのように解決しています。

if (User::where('mobile', Input::get('mobile'))->exists()) {
    $user = User::where('mobile', Input::get('mobile'))->first()
}

2つのクエリを実行することなく、これを行うことはできますか?

どのように解決するのですか?

注:first()メソッドは、元の質問で説明したように例外を投げません。 もしこのような例外が発生するのであれば、あなたのコードに別のエラーがあるのでしょう。

first()を使用し、結果を確認する正しい方法です。

$user = User::where('mobile', Input::get('mobile'))->first(); // model or null
if (!$user) {
   // Do stuff if it doesn't exist.
}

その他のテクニック(推奨しない、不必要なオーバーヘッド)。

$user = User::where('mobile', Input::get('mobile'))->get();

if (!$user->isEmpty()){
    $firstUser = $user->first()
}

または

try {
    $user = User::where('mobile', Input::get('mobile'))->firstOrFail();
    // Do stuff when user exists.
} catch (ErrorException $e) {
    // Do stuff if it doesn't exist.
}

または

// Use either one of the below. 
$users = User::where('mobile', Input::get('mobile'))->get(); //Collection

if (count($users)){
    // Use the collection, to get the first item use $users->first().
    // Use the model if you used ->first();
}

それぞれ、必要な結果を得るための異なる方法です。