programing

웅변 -> first() if -> exists()

projobs 2022. 9. 22. 22:15
반응형

웅변 -> first() if -> exists()

테이블에서 조건이 일치하는 첫 번째 행을 가져옵니다.

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

정상적으로 동작하지만 조건이 일치하지 않으면 다음과 같이 예외가 발생합니다.

ErrorException
Trying to get property of non-object

현재 해결 방법은 다음과 같습니다.

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

두 개의 쿼리를 실행하지 않고 이 작업을 수행할 수 있습니까?

주의: 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();
}

각각 다른 방법으로 원하는 결과를 얻을 수 있습니다.

(ps - 코멘트는 할 수 없습니다)가장 좋은 방법은 당신이 한 것과 같거나 비슷한 것이라고 생각합니다.

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

오, 그리고:count()그 대신exists하지만 이건 그 다음에 쓰는 것일 수도 있어get.

get돌아온다Collection여러 행을 가져오도록 되어 있습니다.

count는 결과를 확인하는 일반적인 방법입니다.

$user = User::where(...)->first(); // returns Model or null
if (count($user)) // do what you want with $user

// or use this:
$user = User::where(...)->firstOrFail(); // returns Model or throws ModelNotFoundException

// count will works with a collection of course:
$users = User::where(...)->get(); // returns Collection always (might be empty)
if (count($users)) // do what you want with $users

간단한 방법으로 실행해 보십시오.

$userset = User::where('name',$data['name'])->first();
if(!$userset) echo "no user found";

답변은 이미 받아들여졌지만, 이러한 상황에서는 에러 처리를 사용하는 것이 보다 우아한 해결책이라고 생각합니다.

    try {
        $user = User::where('mobile', Input::get('mobile'))->first();
    } catch (ErrorException $e) {
        // Do stuff here that you need to do if it doesn't exist.
        return View::make('some.view')->with('msg', $e->getMessage());
    }

언급URL : https://stackoverflow.com/questions/24531312/eloquent-first-if-exists

반응형