반응형
웅변 -> 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
반응형
'programing' 카테고리의 다른 글
봄 대 EJB스프링이 EJB를 대체할 수 있습니까? (0) | 2022.09.25 |
---|---|
스프링 부트 프로파일 사용 방법 (0) | 2022.09.25 |
팝업을 위한 작업 디렉토리를 지정하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
Visual Studio Code에서 생성된 vue-cli 3 앱 디버깅 (0) | 2022.09.22 |
PHP5에 오류가 있습니다.동적 라이브러리를 로드할 수 없습니다. (0) | 2022.09.22 |