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?


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
}

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.


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
}

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


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', 'user@email.com')->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.


5

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

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


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


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
}

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

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


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

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

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

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

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 
}

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.


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.


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!
    }

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!


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!');
}

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.');
        }

    }

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...
}

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


-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';
    }


8
Si vous avez un utilisateur de table avec ... disons plus de 1 000 000 000 d'enregistrements, vous vérifierez longtemps
TrueStory
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.