¿Actualizar datos de la base de datos laravel?

publicado por: Anonymous

Estoy intentando actualizar un registro de la forma en la que se muestra en la documentación de laravel y también de algunos sitios web y vídeos que miré, pero no pude, no me sale ningun error pero tampoco se actualizan los campos.

Entonces pensé que de la manera como agregro un usuario a la base de datos,

public function store(Request $request)
{
    $usuarios = new Usuario();

    $usuarios->nombre = $request->Nombre;
    $usuarios->apellidos = $request->Apellidos;
    $usuarios->sexo = $request->Sexo;
    $usuarios->edad = $request->Edad;
    $usuarios->correo = $request->Correo;

    $usuarios->save();
    
    return redirect('usuarios'); 
}

también podría actualizarlo solo cambiando la primera línea de la función update

public function edit($id)
{
    $usuario = Usuario::findOrFail($id);
    return view('usuarios.edit' , compact('usuario'));
}

/**
 * Update the specified resource in storage.
 *
 * @param  IlluminateHttpRequest  $request
 * @param  int  $id
 * @return IlluminateHttpResponse
 */
public function update(Request $request,  $id)
{

   $usuario = Usuario::findOrFail($id);
    
    $usuario->nombre = $request->Nombre;
    $usuario->apellidos = $request->Apellidos;
    $usuario->sexo = $request->Sexo;
    $usuario->edad = $request->Edad;
    $usuario->correo = $request->Correo;

    

    $usuario->save();
    
    return redirect('usuarios'); 
}

cabe resaltar que de esa manera me actualiza los datos perfectamente , pero mi pregunta es: ¿está mal actualizarlo de esa manera? o si no es una mala práctica hacerlo de esa manera.

solución

Es correcto actualizarlo de esa manera, aunque hay otros métodos que pueden ahorrar líneas de código y hacer más «profesional» el código, dentro de los estándares de Laravel:

  1. Route Model Binding

    Consiste en «traer» el modelo directamente desde la ruta, asumiendo que estemos pasando su llave primaria como parámetro:

    Route::put('actualizar-usuario/{usuario}', '[email protected]');
    

    Y en el controlador recibes directamente el modelo que vas a actualizar:

    public function update(Usuario $usuario, Request $request)
    {
        // trabajar con los campos del request
        $usuario->save();
    }
    

    Puedes ver más información en: https://laravel.com/docs/5.7/routing#route-model-binding

  2. Utilizar el método fill

    En caso que no necesites manipular los datos que recibes del request (según lo que veo en el código, es tu caso), no necesitas asignar los valores del request línea a línea a las propiedades del objeto, tan solo pasas el array del request al método fill y este se encarga de actualizar los campos permitidos:

    public function update(Usuario $usuario, Request $request)
    {
        $usuario->fill($request->all());
        $usuario->save();
    }
    

    El método fill acepta un array como parámetro.

    Puedes ver más información en: https://laravel.com/docs/5.7/eloquent#mass-assignment

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *