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(); }
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
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();
nandu
$update = \DB::table('student') ->where('id', $data['id']) ->limit(1) ->update( [ 'name' => $data['name'], 'address' => $data['address'], 'email' => $data['email'], 'contactno' => $data['contactno'] ]);
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));
Y lo que está en línea
189
?– Jarek Tkaczyk
2 de diciembre de 2014 a las 12:05