Laravel vérifie si un enregistrement existe

258

Je suis nouveau à Laravel. Veuillez excuser la question du débutant, mais comment savoir s'il existe un enregistrement?

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

Que puis-je faire ici pour voir s'il $usera un dossier?

Ben
la source
2
Eh bien pour commencer, vous devez exécuter un findOrFail () ou similaire sur la requête $ user
Mark Baker
9
cela n'aide pas vraiment
Ben
1
Alors qu'est-ce que ça fait? Pourquoi ça n'aide pas? $user = User::where('email', '=', Input::get('email'));crée simplement une requête dans $user, vous devez exécuter cette requête. findOrFail()est une façon d'exécuter cette requête. get()serait une autre façon, firstOrFail()une autre
Mark Baker
2
Si une suggestion «n'aide pas vraiment», essayez de dire pourquoi elle n'aide pas vraiment, car de cette façon cela signifie que nous savons comment améliorer / changer cette suggestion
Mark Baker
considérez cela i.imgur.com/ulqyOiw.png pas besoin de réinventer la roue
nikoss

Réponses:

566

Cela dépend si vous souhaitez travailler avec l'utilisateur par la suite ou seulement vérifier s'il en existe un.

Si vous souhaitez utiliser l'objet utilisateur s'il existe:

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

Et si vous voulez seulement vérifier

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

Ou encore mieux

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
lukasgeiter
la source
20
si vous appelez exists()contre un record inexistant, cela donne une erreur:Call to a member function exists() on null
Volatil3
36
@ Volatil3 Vous faites quelque chose de mal. Vous ne pouvez pas appeler existe après avoir déjà exécuté la requête
lukasgeiter
7
@lukasgeiter suppose que vous avez raison. J'avais déjà appeléfirst()
Volatil3
1
Je pense que c'est la meilleure façon de savoir si l'utilisateur existe. User :: where ('email', '=', 'value') -> count ()> 0;
Janaka Pushpakumara
1
@ Volatil3 je viens de tester -> existe () avec laravel 5.5, il dit faux s'il n'existe pas.
Pezhvak
26

L'une des meilleures solutions consiste à utiliser la méthode firstOrNewou firstOrCreate. La documentation contient plus de détails sur les deux.

tapos ghosh
la source
5
tout en ne correspondant pas à la question, encore, des fonctions très utiles. la différence entre les deux est que firstOrNew instancie une instance du modèle appelée tandis que firstOrCreate enregistre instantanément le modèle interrogé, vous devez donc mettre à jour les modifications sur le modèle firstOrCreate.
Gokigooooks
Oui, ou une autre façon de penser, utilisez firstOrCreate si vous pouvez passer tous les attributs en une seule fois (utilisez le deuxième paramètre), mais firstOrNew si vous avez besoin de plus de logique avant d'enregistrer.
William Turrell
22
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
lucidlogic
la source
1
Ce devrait être la réponse acceptée. La façon la plus efficace et la plus dédiée de le faire consiste à utiliser la exists()méthode.
Robo Robok
12
if($user->isEmpty()){
    // has no records
}

Eloquent utilise des collections. Voir le lien suivant: https://laravel.com/docs/5.4/eloquent-collections

Nabil
la source
2
Ouais mais ça ne rend pas une collection. Cela renvoie un seul objet de modèle, car vous supposeriez que chaque utilisateur a un objet unique, emailce ->isEmpty()qui générera une erreur.
user3574492
Et si j'obtiens l'erreur suivante:Call to a member function isEmpty() on null
Pathros
6
if (User::where('email', '[email protected]')->first())
    // It exists
else
    // It does not exist

Utilisez first(), pas count()si vous avez seulement besoin de vérifier l'existence.

first()est plus rapide car il recherche une seule correspondance alors qu'il count()compte toutes les correspondances.

doncadavona
la source
5

Dans laravel eloquent, la méthode par défaut existe (), voir l'exemple suivant.

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

Dhanushka Udayanga
la source
4

Laravel 5.6.26v

trouver l'enregistrement existant via la clé primaire (email ou id)

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

puis

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

inclure "utiliser la base de données" et le nom de table utilisateur devient pluriel en utilisant la requête ci-dessus comme utilisateur aux utilisateurs

Nadeem Qasmi
la source
3

Cela vérifiera si l'e-mail demandé existe dans la table des utilisateurs:

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}
A. Zaman
la source
2

Dans votre contrôleur

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

À votre avis - Afficher le message déjà existant

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
Karthik
la source
Meilleure solution! Mais je dois changer le nom de la table et ajouter le nom de la colonne e-mail:required|unique:users,email|email
marcelo2605
Excellente solution.
Joeri Il y a
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

fonctionnerait avec try / catch

-> get () retournerait toujours un tableau vide

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

C'est simple de savoir s'il y a des enregistrements ou non

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";
Rashi Goyal
la source
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
Mathesh Raj
la source
0

vous pouvez utiliser la validation laravel.

Mais ce code est également bon:

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

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

Cela vérifiera si une adresse e-mail particulière existe dans le tableau:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}
Syed Muzammil Ali
la source
0

La vérification de l' instruction nullwithin ifempêche Laravel de renvoyer 404 immédiatement après la fin de la requête.

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

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

    return $user;
}

Il semble qu'il exécute une double requête si l'utilisateur est trouvé, mais je n'arrive pas à trouver d'autre solution fiable.

Arthur Tarasov
la source
Vous pouvez remplacer findpar where. User::where(id, 1)->first()
Edgar Ortega
0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

peut être écrit comme

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

Cela retournera vrai ou faux sans affecter une variable temporaire si c'est tout ce que vous utilisez $ user pour dans l'instruction d'origine.

Chawker21
la source
0

Je pense que ci-dessous est le moyen le plus simple d'y parvenir:

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

Créé ci-dessous la méthode (pour moi) pour vérifier si l'ID d'enregistrement donné existe sur la table Db ou non.

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);

Accueil Ça aide!

rc.adhikari
la source
0

La façon la plus simple de le faire

    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!');
}
Rahul Jat
la source
0

Laravel 6 ou en haut: écrivez le nom de la table, puis donnez la condition de clause where par exemple où ('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.');
        }

    }
Seigneur
la source
0

Pour vérifier efficacement si l'enregistrement existe, vous devez utiliser la méthode is_null pour vérifier la requête.

Le code ci-dessous pourrait être utile:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}
Lawrence E Bosumbe
la source
-1

Options de travail les plus courtes:

// 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();
fabricant de roues
la source
-12

c'est un code simple pour vérifier que le courrier électronique existe ou non dans la base de données

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    if (in_array ($ user, $ data ['email']))
    {
    echo 'existait un e-mail';
    }

ram pratap singh
la source
8
Si vous avez un utilisateur de table avec ... disons plus de 1 000 000 000 d'enregistrements, vous vérifierez longtemps
TrueStory