レコードが存在するかどうかを確認するLaravel


257

Laravelは初めてです。初心者の質問は申し訳ありませんが、レコードが存在するかどうかはどうすればわかりますか?

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

$userレコードがあるかどうかを確認するためにここで何ができますか?


2
まず、$ userクエリでfindOrFail()または同様のものを実行する必要があります
Mark Ba​​ker

9
それは本当に役に立たない
ベン

1
次に、それは何をしますか?なぜそれは役に立たないのですか?$user = User::where('email', '=', Input::get('email'));でクエリを作成するだけで$user、そのクエリを実行する必要があります。findOrFail()そのクエリを実行する1つの方法です。get()別の方法で、firstOrFail()別の
マークベイカー

2
提案が「本当に役に立たない」場合、なぜそれが本当に役に立たないのかを言ってみてください。それは、その提案を改善/変更する方法を知っていることを意味します
Mark Ba​​ker

これを検討してください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
これは、ユーザーが存在するかどうかを確認するためのより良い方法だと思います。User :: where( 'email'、 '='、 'value')-> count()> 0;
Janaka Pushpakumara 2016

1
@ Volatil3私はテストしたばかりです-> laravel 5.5でexists()、存在しない場合はfalseと表示されます。
Pezhvak 2018年

26

最良の解決策の1つは、firstOrNewまたはfirstOrCreateメソッドを使用することです。ドキュメントは、両方の詳細を持っています。


5
質問に当てはまりませんが、それでも非常に便利な機能です。2つの違いは、firstOrNewが呼び出されたモデルのインスタンスをインスタンス化するのに対し、firstOrCreateは照会されたモデルを即座に保存するため、firstOrCreateのモデルの変更を更新する必要があることです。
Gokigooooks 2016

はい、または別の考え方として、すべての属性を一度に渡すことができる場合はfirstOrCreateを使用し(2番目のパラメーターを使用)、保存する前にさらにロジックが必要な場合はfirstOrNewを使用します。
William Turrell

22
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
Pathros

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

存在を確認するだけでよい場合first()count()、を使用してください。

first()あるより速く、それは一方で、単一の一致を調べるので、count()カウントすべての一致。


5

laravel eloquentでは、デフォルトのexists()メソッドがあります。以下の例を参照してください。

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


4

Laravel 5.6.26v

主キー(電子メールまたはID)を使用して既存のレコードを検索する

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

その後

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

「use DB」を含め、テーブル名userは、user to usersのような上記のクエリを使用して複数になります


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()は空の配列を返します



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

ステートメントnullifをチェックすると、クエリが終了した直後にLaravelが404を返すことがなくなります。

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

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

    return $user;
}

ユーザーが見つかった場合は二重クエリを実行するようですが、他の信頼できる解決策を見つけることができません。


あなたは置き換えることができfindwhereUser::where(id, 1)->first()
Edgar Ortega、

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句の条件を指定しますwhere( 'id'、$ request-> id)

 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( 'User')-> pluck( 'email')-> toArray();
    if(in_array($ user、$ data ['email']))
    {
    echo 'existed email';
    }


8
たとえば、1,000,000,000を超えるレコードを持つテーブルUserがある場合、長い時間のveeeeeeeryをチェックすることになります
TrueStory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.