Consulta de actualización de Laravel

3 minutos de lectura

Estoy tratando de actualizar un usuario sobre la base de la identificación del correo electrónico que no existe, ¿hay alguna manera de hacerlo sin consultas sin procesar?

Actualmente el error

{“error”:{“type”:”ErrorException”,”message”:”Creando un objeto predeterminado a partir de un valor vacío”,”file”:”C:\wamp\www\celeb-jim\app\controllers\SignupController.php “,”línea”:189}}

Mi código

    public function changeAccountStatus ($plan, $userEmail ){
        $UpdateDetails = User::where('email', '=',  $userEmail)->first();
        $UpdateDetails->member_type = $plan;
        $UpdateDetails->save();
    }

  • Y lo que está en línea 189?

    – Jarek Tkaczyk

    2 de diciembre de 2014 a las 12:05

avatar de usuario de msturdy
más robusto

Podrías usar el Generador de consultas de Laravelpero esta no es la mejor manera de hacerlo.

Verifique la respuesta de Wader a continuación para conocer la forma Elocuente, que es mejor ya que le permite verificar que realmente hay un usuario que coincide con la dirección de correo electrónico y manejar el error si no lo hay.

DB::table('users')
        ->where('email', $userEmail)  // find your user by their email
        ->limit(1)  // optional - to ensure only one record is updated.
        ->update(array('member_type' => $plan));  // update the record in the DB. 

Si tiene varios campos para actualizar, simplemente puede agregar más valores a esa matriz al final.

  • Supongo que no entendiste la pregunta. Quiere proporcionar correo electrónico en el método Eloquent find () y quiere que coincida con la columna emil

    – Khan Shahrukh

    2 de diciembre de 2014 a las 12:01


  • ¿Por qué usaría Query Builder para esto cuando op tiene una configuración de modelo Eloquent? El problema no es que esto no se pueda hacer fácilmente en Eloquent, sino el hecho de que no hay una verificación nula antes de intentar establecer propiedades en el objeto (ver mi respuesta)

    – Vadeador

    2 de diciembre de 2014 a las 13:22

  • @Wader sí, tienes razón. Borraría esto si no fuera aceptado. Ese +1 en el tuyo es mío. Actualizaré esto para que quede más claro.

    – más robusto

    2 de diciembre de 2014 a las 18:33


  • No estaba diciendo que esto estuviera mal, simplemente cuestionaba los beneficios de usar Query Builder sobre Eloquent. Me doy cuenta de que mi comentario suena bastante duro, disculpas.

    – Vadeador

    3 de diciembre de 2014 a las 9:02

  • @Wader, no hay problema, tenías razón al cuestionarlo. ¡La tuya es la mejor respuesta!

    – más robusto

    3 de diciembre de 2014 a las 11:33

Avatar de usuario de Cengkuru Michael
Michael Cengkuru

Intenta hacerlo así.

User::where('email', $userEmail)
       ->update([
           'member_type' => $plan
        ]);

  • Usuario::where(‘correo electrónico’, $correoelectrónico del usuario)->actualizar([‘member_type’ => $plan]);

    –Pasindu Jayanath

    31 oct 2018 a las 14:45

  • Esa es la mejor solución, porque este código ejecuta solo una consulta sql en lugar de otras

    – Simón Rusin

    3 de junio de 2022 a las 5:09

Este error sugeriría que User::where('email', '=', $userEmail)->first() está devolviendo nulo, en lugar de un problema con la actualización de su modelo.

Verifique que realmente tiene un Usuario antes de intentar cambiar las propiedades en él, o use el firstOrFail() método.

$UpdateDetails = User::where('email', $userEmail)->first();

if (is_null($UpdateDetails)) {
    return false;
}

o usando el firstOrFail() método, no hay necesidad de verificar si el usuario es nulo porque esto genera una excepción (ModelNotFoundException) cuando no se encuentra un modelo, que puede capturar usando App::error() http://laravel.com/docs/4.2/errors#handling-errors

$UpdateDetails = User::where('email', $userEmail)->firstOrFail();

avatar de usuario de nandu
nandu

$update = \DB::table('student') ->where('id', $data['id']) ->limit(1) ->update( [ 'name' => $data['name'], 'address' => $data['address'], 'email' => $data['email'], 'contactno' => $data['contactno'] ]); 

avatar de usuario de rashedcs
Rashedcs

Es muy simple de hacer. El código se da a continuación:

 DB::table('user')->where('email', $userEmail)->update(array('member_type' => $plan));  

¿Ha sido útil esta solución?