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?

Ben
fuente
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
}
lukasgeiter
fuente
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.

tapos ghosh
fuente
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
}
lucidlogic
fuente
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

Nabil
fuente
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', '[email protected]')->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.

doncadavona
fuente
5

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

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

Dhanushka Udayanga
fuente
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

Nadeem Qasmi
fuente
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
}
A. Zaman
fuente
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
Karthik
fuente
¡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

Julian
fuente
1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif
Mohammad Usman
fuente
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";
Rashi Goyal
fuente
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
Mathesh Raj
fuente
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";
hamidteimouri
fuente
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 
}
Syed Muzammil Ali
fuente
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.

Arthur Tarasov
fuente
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.

Chawker21
fuente
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!
    }
ShuBham GuPta
fuente
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!

rc.adhikari
fuente
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!');
}
Rahul Jat
fuente
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.');
        }

    }
Señor
fuente
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...
}
Lawrence E Bosumbe
fuente
-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();
fabricante de ruedas
fuente
-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';
    }

ram pratap singh
fuente
8
Si tiene una tabla Usuario con ... digamos más de 1,000,000,000 de registros, estará revisando muuuucho tiempo
TrueStory