Laravel Verifica se esiste un record


258

Sono nuovo di Laravel. Scusa la domanda per i principianti, ma come faccio a sapere se esiste un record?

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

Cosa posso fare qui per vedere se $userha un record?


2
Bene, per iniziare devi eseguire findOrFail () o simile sulla query $ user
Mark Baker,

9
questo non aiuta davvero
Ben

1
Allora cosa fa? Perché non aiuta? $user = User::where('email', '=', Input::get('email'));crea semplicemente una query $user, è necessario eseguire quella query. findOrFail()è un modo per eseguire quella query. get()sarebbe un altro modo, firstOrFail()un altro
Mark Baker il

2
Se un suggerimento "non aiuta davvero" prova a dire perché non aiuta davvero, perché in questo modo significa che sappiamo come migliorare / cambiare quel suggerimento
Mark Baker

considera questo i.imgur.com/ulqyOiw.png non c'è bisogno di reinventare la ruota
nikoss

Risposte:


566

Dipende se si desidera lavorare con l'utente in seguito o verificare solo se esiste.

Se si desidera utilizzare l'oggetto utente se esiste:

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

E se vuoi solo controllare

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

O ancora più bello

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

20
se si chiama exists()contro un record inesistente, si ottiene un errore:Call to a member function exists() on null
Volatil3

36
@ Volatil3 Stai facendo qualcosa di sbagliato. Non è possibile chiamare esiste dopo aver già eseguito la query
lukasgeiter

7
@lukasgeiter indovina hai ragione. Avevo già chiamatofirst()
Volatil3

1
Penso che questo sia il modo migliore per scoprire se l'utente esiste. Utente :: where ('email', '=', 'value') -> count ()> 0;
Janaka Pushpakumara,

1
@ Volatil3 ho appena testato -> esiste () con laravel 5.5, dice falso se non esiste.
Pezhvak,

26

Una delle migliori soluzioni è utilizzare il metodo firstOrNewo firstOrCreate. La documentazione contiene ulteriori dettagli su entrambi.


5
pur non rispondendo alla domanda, comunque, funzioni molto utili. la differenza tra i due è che firstOrNew crea un'istanza di un'istanza del modello chiamata mentre firstOrCreate salva istantaneamente il modello interrogato, quindi è necessario aggiornare le modifiche sul primo modello OrCreate.
Gokigooooks

Sì, o un altro modo di pensarci è, usa firstOrCreate se puoi passare tutti gli attributi in una volta (usa il secondo parametro), ma firstOrNew se hai bisogno di ulteriore logica prima di salvare.
William Turrell,

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

1
Questa dovrebbe essere la risposta accettata. Il modo più efficiente e dedicato per farlo è attraverso il exists()metodo.
Robo Robok,

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

Eloquent utilizza le raccolte. Vedi il seguente link: https://laravel.com/docs/5.4/eloquent-collections


2
Sì, ma non sta restituendo una collezione. Sta restituendo un singolo oggetto modello come si suppone che ogni utente abbia un unico, emailquindi ->isEmpty()genererà un errore.
user3574492,

E se ottengo il seguente errore: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

Utilizzare first(), non count()se è necessario solo verificare l'esistenza.

first()è più veloce perché controlla una singola partita mentre count()conta tutte le partite.


5

In laravel eloquent, ha il metodo esiste esiste (), fare riferimento all'esempio seguito.

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


4

Laravel 5.6.26v

per trovare il record esistente tramite chiave primaria (e-mail o ID)

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

poi

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

include "usa DB" e il nome della tabella diventa plurale usando la query sopra come utente agli utenti


3

Questo verificherà se l'e-mail richiesta esiste nella tabella utente:

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

1

Nel tuo controller

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

Nella tua vista - Visualizza messaggio già esistente

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

Soluzione migliore! Ma devo cambiare il nome della tabella e aggiungere il nome della colonna e-mail:required|unique:users,email|email
marcelo2605

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

funzionerebbe con try / catch

-> get () restituirà comunque un array vuoto


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

0

È semplice sapere se ci sono record o meno

$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

puoi usare la validazione laravel.

Ma questo codice è anche buono:

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

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

0

Questo verificherà se nella tabella esiste un indirizzo email specifico:

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

0

Controllo per nullentro ifdichiarazione impedisce di tornare laravel 404 subito dopo l'interrogazione è finita.

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

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

    return $user;
}

Sembra che esegua una doppia query se l'utente viene trovato, ma non riesco a trovare un'altra soluzione affidabile.


È possibile sostituire findcon where. User::where(id, 1)->first()
Edgar Ortega,

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

può essere scritto come

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

Questo restituirà vero o falso senza assegnare una variabile temporanea se questo è tutto ciò che stai usando $ user per nell'istruzione originale.


0

Penso che di seguito sia il modo più semplice per ottenere lo stesso:

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

0

Creato sotto il metodo (per me stesso) per verificare se l'ID record indicato esiste o meno nella tabella 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);

Home Aiuta!


0

Il modo più semplice di fare

    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 o in alto: scrivi il nome della tabella, quindi specifica la condizione della clausola where, ad esempio 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

Per verificare l'esistenza del record, è necessario utilizzare il metodo is_null per verificare la query.

Il codice seguente potrebbe essere utile:

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

-1

Opzioni di lavoro più brevi:

// 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

questo è un semplice codice per verificare che l'e-mail sia presente o meno nel database

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    if (in_array ($ user, $ dati [ 'email']))
    {
    echo "email esistente";
    }


8
Se hai un utente da tavolo con ... diciamo oltre 1.000.000.000 di record, controllerai per molto tempo
veeeeeeery
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.