Laravel 레코드가 있는지 확인


257

나는 Laravel을 처음 사용합니다. 초보자 질문을 실례하지만 기록이 있는지 어떻게 알 수 있습니까?

$user = User::where('email', '=', Input::get('email'));

$user기록이 있는지 확인하기 위해 여기서 무엇을 할 수 있습니까?


2
그럼 당신은 $ 사용자 쿼리에 유사한 findOrFail () 또는 실행해야합니다 시작
마크 베이커

9
그다지 도움이되지 않습니다
Ben

1
그럼 어떻게합니까? 왜 도움이되지 않습니까? $user = User::where('email', '=', Input::get('email'));에 검색어를 작성하기 만하면 $user해당 검색어를 실행해야합니다. findOrFail()해당 쿼리를 실행하는 한 가지 방법입니다. get()또 다른 방법 일 firstOrFail()것입니다
Mark Baker

2
제안이 "실제로 도움이되지 않는"경우 도움이되지 않는 이유를 말하십시오. 그렇게 하면 제안을 개선 / 변경하는 방법을 알 수 있기 때문에
Mark Baker

i.imgur.com/ulqyOiw.png 고려 바퀴를 재발 명할 필요가 없습니다
nikoss

답변:


565

나중에 사용자와 작업 할 것인지 아니면 존재하는지 확인해야합니다.

존재하는 경우 사용자 오브젝트를 사용하려는 경우 :

$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

그리고 당신이 확인하고 싶다면

if (User::where('email', '=', Input::get('email'))->count() > 0) {
   // user found
}

아니면 더 좋은

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}

20
exists()존재하지 않는 레코드에 대해 호출 하면 오류가 발생합니다.Call to a member function exists() on null
Volatil3

36
@ Volatil3 당신은 뭔가 잘못하고 있습니다. 당신은 이미 쿼리를 실행 한 후에하지 호출이 존재 수
lukasgeiter

7
@lukasgeiter 당신이 옳은 것 같아요. 나는 이미 전화했다first()
Volatil3

1
이것이 사용자가 존재하는지 찾는 더 좋은 방법이라고 생각합니다. 사용자 :: where ( '이메일', '=', '값')-> count ()> 0;
Janaka Pushpakumara

1
@ Volatil3 방금 테스트했습니다-laravel 5.5로-> exists (), 존재하지 않으면 false라고합니다.
Pezhvak

26

가장 좋은 해결책 중 하나는 firstOrNew또는 firstOrCreate방법 을 사용하는 것입니다. 이 문서 에는 두 가지에 대한 자세한 내용이 있습니다.


5
질문에 맞지 않지만 여전히 유용한 기능입니다. 이 둘의 차이점은 firstOrNew가 호출 된 모델의 인스턴스를 인스턴스화 하는 반면 firstOrCreate는 쿼리 된 모델을 즉시 저장하므로 firstOrCreate'd 모델의 변경 사항을 업데이트해야한다는 것입니다.
Gokigooooks

그러나 다른 생각으로는 firstOrCreate를 사용 하면 한 번에 모든 속성을 전달할 수 있으면 (두 번째 매개 변수 사용) 저장하기 전에 추가 논리가 필요한 경우 firstOrNew 입니다.
William Turrell

21
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

1
이것은 정답입니다. 가장 효율적이고 헌신적 인 방법은 방법을 사용하는 것입니다 exists().
Robo Robok

12
if($user->isEmpty()){
    // has no records
}

Eloquent는 컬렉션을 사용합니다. 다음 링크를 참조하십시오 : https://laravel.com/docs/5.4/eloquent-collections


2
네.하지만 컬렉션을 반환하지 않습니다. 각 사용자마다 고유 한 것으로 가정하여 단일 모델 객체를 반환 email하므로 ->isEmpty()오류가 발생합니다.
user3574492

그리고 다음과 같은 오류가 발생하면 어떻게 Call to a member function isEmpty() on null
됩니까?

6
if (User::where('email', 'user@email.com')->first())
    // It exists
else
    // It does not exist

사용은 first()하지 count()만 존재 여부를 확인해야합니다.

first()입니다 빨리 는 반면, 하나의 일치를 확인하기 때문에 count()카운트 모든 경기.


5

laravel eloquent에는 default exist () 메소드가 있습니다. 다음 예제를 참조하십시오.

if(User::where('id', $user_id )->exists()){ // your code... }


4

라 라벨 5.6.26v

기본 키 (이메일 또는 아이디)를 통해 기존 레코드를 찾기 위해

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

그때

      if(!$user){
             //user is not found 
      }
      if($user){
             // user found 
      }

"DB 사용"을 포함하고 테이블 이름 사용자는 사용자와 같은 위의 쿼리를 사용하여 복수가됩니다.


3

요청 된 이메일이 사용자 테이블에 존재하는지 확인합니다.

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}

1

컨트롤러에서

$this->validate($request, [
        'email' => 'required|unique:user|email',
    ]); 

보기에서-기존 메시지 표시

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

최고의 솔루션! 그러나 테이블 이름을 변경하고 전자 메일 열 이름을 추가해야합니다.required|unique:users,email|email
marcelo2605

1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

try / catch와 함께 작동합니다

-> get ()은 여전히 ​​빈 배열을 반환합니다


1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif

0

기록이 있는지 없는지 간단하게 알 수 있습니다.

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";

0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');

0

laravel 유효성 검사를 사용할 수 있습니다.

그러나이 코드도 좋습니다.

$user = User::where('email',  $request->input('email'))->count();

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";

0

표에 특정 이메일 주소가 있는지 확인합니다.

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}

0

nullwithin if문을 확인 하면 쿼리가 끝난 직후 Laravel에서 404가 반환되지 않습니다.

if ( User::find( $userId ) === null ) {

    return "user does not exist";
}
else {
    $user = User::find( $userId );

    return $user;
}

사용자가 발견되면 이중 쿼리를 실행하는 것처럼 보이지만 신뢰할만한 다른 솔루션을 찾지 못하는 것 같습니다.


으로 교체 할 수 find있습니다 where. User::where(id, 1)->first()
Edgar Ortega 4

0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

로 쓸 수 있습니다

if (User::where('email', '=', Input::get('email'))->first() === null) {
   // user doesn't exist
}

원래 명령문에서 $ user를 모두 사용하는 경우 임시 변수를 지정하지 않고 true 또는 false를 리턴합니다.


0

아래 방법은 동일한 것을 달성하는 가장 간단한 방법이라고 생각합니다.

    $user = User::where('email', '=', $request->input('email'))->first();
    if ($user) {
       // user doesn't exist!
    }

0

주어진 레코드 ID가 Db 테이블에 존재하는지 여부를 확인하기 위해 아래의 메소드를 작성했습니다.

private function isModelRecordExist($model, $recordId)
{
    if (!$recordId) return false;

    $count = $model->where(['id' => $recordId])->count();

    return $count ? true : false;
}

// To Test
$recordId = 5;
$status = $this->isModelRecordExist( (new MyTestModel()), $recordId);

홈 도움이됩니다!


0

가장 쉬운 방법

    public function update(Request $request, $id)
{


    $coupon = Coupon::where('name','=',$request->name)->first(); 

    if($coupon->id != $id){
        $validatedData = $request->validate([
            'discount' => 'required',   
            'name' => 'required|unique:coupons|max:255',      
        ]);
    }


    $requestData = $request->all();
    $coupon = Coupon::findOrFail($id);
    $coupon->update($requestData);
    return redirect('admin/coupons')->with('flash_message', 'Coupon updated!');
}

0

Laravel 6 또는 상단 : 테이블 이름을 작성한 다음 where ( 'id', $ request-> id)에 where 절 조건을 지정하십시오

 public function store(Request $request)
    {

        $target = DB:: table('categories')
                ->where('title', $request->name)
                ->get()->first();
        if ($target === null) { // do what ever you need to do
            $cat = new Category();
            $cat->title = $request->input('name');
            $cat->parent_id = $request->input('parent_id');
            $cat->user_id=auth()->user()->id;
            $cat->save();
            return redirect(route('cats.app'))->with('success', 'App created successfully.');

        }else{ // match found 
            return redirect(route('cats.app'))->with('error', 'App already exists.');
        }

    }

0

레코드가 있는지 확인하는 효율적인 방법은 is_null 메소드를 사용하여 쿼리를 확인해야합니다.

아래 코드가 도움이 될 수 있습니다.

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}

-1

최단 작업 옵션 :

// if you need to do something with the user 
if ($user = User::whereEmail(Input::get('email'))->first()) {

    // ...

}

// otherwise
$userExists = User::whereEmail(Input::get('email'))->exists();


-12

이것은 데이터베이스에 이메일이 있는지 여부를 확인하는 간단한 코드입니다.

    $ data = $ request-> all ();
    $ user = DB :: table ( '사용자')-> 취득 ( '이메일')-> toArray ();
    if (in_array ($ user, $ data [ 'email']))
    {
    '기존 이메일'에코;
    }


8
1,000,000,000 개가 넘는 레코드가있는 테이블 사용자가있는 경우, 긴 시간 동안 veeeeeeery를 확인하게됩니다
TrueStory
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.