Comprobación de Laravel si existe un registro


258

Soy nuevo en Laravel. Disculpe la pregunta de novato, pero ¿cómo puedo encontrar si existe un registro?

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

¿Qué puedo hacer aquí para ver si $usertiene un registro?


2
Bueno, para comenzar, debe ejecutar findOrFail () o similar en la consulta $ user
Mark Baker, el

9
eso realmente no ayuda
Ben

1
Entonces que hace? ¿Por qué no ayuda? $user = User::where('email', '=', Input::get('email'));simplemente crea una consulta en $user, debe ejecutar esa consulta. findOrFail()es una forma de ejecutar esa consulta. get()sería otra forma, firstOrFail()otra
Mark Baker

2
Si una sugerencia "realmente no ayuda" intente decir por qué realmente no ayuda, porque de esa manera significa que sabemos cómo mejorar / cambiar esa sugerencia
Mark Baker

considere esto i.imgur.com/ulqyOiw.png no es necesario reinventar la rueda
nikoss

Respuestas:


566

Depende si desea trabajar con el usuario después o solo verificar si existe.

Si desea utilizar el objeto de usuario si existe:

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

Y si solo quieres comprobar

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

O incluso mejor

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

20
si llama exists()a un registro inexistente, entonces da error:Call to a member function exists() on null
Volatil3

36
@ Volatil3 Estás haciendo algo mal. No puede llamar existe después de que ya haya ejecutado la consulta
lukasgeiter

77
@lukasgeiter supongo que tienes razón. Ya había llamadofirst()
Volatil3

1
Creo que esta es la mejor manera de encontrar si el usuario existe. Usuario :: where ('email', '=', 'value') -> count ()> 0;
Janaka Pushpakumara

1
@ Volatil3 que acabo de probar -> existe () con laravel 5.5, dice falso si no existe.
Pezhvak

26

Una de las mejores soluciones es usar el firstOrNewfirstOrCreate método o . La documentación tiene más detalles sobre ambos.


55
aunque no se ajusta a la pregunta, aún así, funciones muy útiles. la diferencia entre los dos es que firstOrNew instancia una instancia del modelo llamado mientras firstOrCreate salva el modelo preguntó al instante lo que necesita para actualizar los cambios en el modelo firstOrCreate'd.
Gokigooooks

Sí, u otra forma de pensarlo es, use firstOrCreate si puede pasar todos los atributos de una vez (use el segundo parámetro), pero firstOrNew si va a necesitar más lógica antes de guardar.
William Turrell

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

1
Esta debería ser la respuesta aceptada. La forma más eficiente y dedicada de hacerlo es a través del exists()método.
Robo Robok

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

Eloquent utiliza colecciones. Vea el siguiente enlace: https://laravel.com/docs/5.4/eloquent-collections


2
Sí, pero no está devolviendo una colección. Está devolviendo un solo objeto modelo, ya que asumiría que cada usuario tiene un único, emailpor ->isEmpty()lo que arrojará un error.
user3574492

Y qué pasa si me sale el siguiente error: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

Use first(), no count()si solo necesita verificar la existencia.

first()es más rápido porque busca una sola coincidencia, mientras que count()cuenta todas las coincidencias.


5

En laravel elocuente, tiene el método predeterminado existe (), consulte el siguiente ejemplo.

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


4

Laravel 5.6.26v

para encontrar el registro existente a través de la clave principal (correo electrónico o id)

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

luego

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

incluye "use DB" y el nombre de la tabla del usuario se convierte en plural usando la consulta anterior como usuario a usuario


3

Esto verificará si el correo electrónico solicitado existe en la tabla de usuario:

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

2

En su controlador

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

En su vista - Mostrar mensaje ya existente

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

¡Mejor solución! Pero necesito cambiar el nombre de la tabla y agregar el nombre de la columna de correo electrónico:required|unique:users,email|email
marcelo2605

Gran solución
Joeri hace

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

funcionaría con try / catch

-> get () aún devolvería una matriz vacía


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

0

Es fácil saber si hay registros o no

$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

puedes usar la validación laravel.

Pero este código también es bueno:

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

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

0

Esto verificará si existe una dirección de correo electrónico particular en la tabla:

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

0

La comprobación de nulldentro de la ifdeclaración evita que Laravel regrese 404 inmediatamente después de que finalice la consulta.

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

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

    return $user;
}

Parece que ejecuta una doble consulta si se encuentra al usuario, pero parece que no puedo encontrar ninguna otra solución confiable.


Podrías reemplazar 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
}

Se puede escribir como

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

Esto devolverá verdadero o falso sin asignar una variable temporal si eso es todo para lo que está utilizando $ user en la declaración original.


0

Creo que a continuación es la forma más sencilla de lograr lo mismo:

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

0

Creado debajo del método (para mí) para verificar si el ID de registro dado existe en la tabla Db o no.

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

Inicio ¡Ayuda!


0

La forma más fácil de hacer

    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 en la parte superior: escriba el nombre de la tabla, luego indique la condición de la cláusula where, por ejemplo 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

La manera eficiente de verificar si el registro existe debe usar el método is_null para verificar la consulta.

El siguiente código puede ser útil:

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

-1

Opciones de trabajo más cortas:

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

este es un código simple para verificar si el correo electrónico existe o no en la base de datos

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    if (in_array ($ usuario, $ datos ['correo electrónico']))
    {
    echo 'correo electrónico existente';
    }


8
Si tiene una tabla Usuario con ... digamos más de 1,000,000,000 de registros, estará revisando muuuucho tiempo
TrueStory
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.