CRUD en Laravel actualizar registros

CRUD en Laravel actualizar registros

¡Hola! ¿Cómo están? ¡Bienvenidos de nuevo! En el curso intermedio de Laravel, continuaremos hoy abordando el CRUD en Laravel actualizar registros. Utilizaremos las funcionalidades que nos proporciona Laravel para actualizar la información en las tablas de nuestra base de datos.

¡Empecemos!

Actualizar registros en Laravel

Laravel utiliza los métodos del CRUD “edit” y “update” de nuestros controladores para actualizar registros en las tablas de nuestra base de datos. Gracias a Eloquent ORM, podemos modificar registros de manera eficiente y segura. Empezaremos por crear las funcionalidades de actualizar para Profesores, Alumnos y Cursos.

Desplegar tu proyecto Laravel a producción

Adquiere la guía en formato PDF

Método Edit y Update para la funcionalidad de Profesores

Empezaremos por la funcionalidad de actualizar registros de Profesores. En el método “edit” del controlador “ProfesorController”, utilizamos primero el método “findOrFail($id)” proporcionado por Eloquent. Este método recupera un registro específico de la tabla “profesores” con un identificador “$id” que se pasa como parámetro.

$profesor = Profesor::findOrFail($id);
return view('profesores.edit', ['profesor' => $profesor]);

En el método “update” creamos un nuevo objeto $profesor que es una nueva instancia del modelo “Profesor”,  con el  método “findOrFail ($id)” de Eloquent obtendremos un registro en específico de la base de datos. Reemplazamos los campos con los valores pasados en la variable $request (es donde se encuentra la nueva información registrada del formulario),  seguidamente con el método save() actualizamos la información en la tabla profesores. Finalmente, regresamos a la vista del listado de profesores.

$profesor = Profesor::findOrFail($id);
$profesor->nombre_apellido = $request->nombre_apellido;
$profesor->profesion = $request->profesion;
$profesor->grado_academico = $request->grado_academico;
$profesor->telefono = $request->telefono;
$profesor->save();
return redirect()->action([ProfesorController::class, 'index']);

Método Edit y Update para la funcionalidad de Alumnos

Aplicamos el mismo procedimiento para la funcionalidad de actualizar registros de alumnos utilizaremos  el controlador “AlumnoController”.

En el método “edit” escribimos el siguiente código:

$alumno = Alumno::findOrFail($id);
return view('alumnos.edit', ['alumno' => $alumno]);

En el método “update” escribimos el siguiente código

$alumno = Alumno::findOrFail($id);
$alumno->nombre_apellido = $request->nombre_apellido;
$alumno->edad = $request->edad;
$alumno->telefono = $request->telefono;
$alumno->direccion = $request->direccion;
$alumno->save();
return redirect()->action([AlumnoController::class, 'index']);

Método Edit y Update para la funcionalidad de Cursos

En los métodos del controlador “CursoController” es ligeramente diferente respecto a los demás controladores por las relaciones que se tiene en las tablas.

En el método “edit” llevamos a cabo tres consultas utilizando Eloquent. Las dos primeras tienen como objetivo obtener los listados de profesores y alumnos respectivamente. La tercera consulta para obtener el curso el cual vamos editar en la vista. Todos estos datos son luego enviados a la vista.

$profesores = Profesor::all();
$alumnos = Alumno::all();
$curso = Curso::findOrFail($id);
return view('cursos.edit', ['curso' => $curso, 'profesores' => $profesores, 'alumnos' => $alumnos]);

En el método “update”, seguimos una lógica similar a los métodos “update” de profesores y alumnos. La diferencia principal se encuentra en la relación que tiene entre los modelos “Curso” y “Alumno”. Mediante el empleo del método “detach”, eliminamos todas las entradas relacionadas en la tabla pivot que coinciden con el “id” de la tabla de cursos. Luego, mediante un bucle “foreach”, volvemos a cargar los “ids” de los alumnos seleccionados en el formulario. El método “attach” nos permitirá almacenar estos datos en nuestra tabla pivot.

$curso = Curso::findOrFail($id);
$curso->materia = $request->materia;
$curso->nivel = $request->nivel;
$curso->horas_academicas = $request->horas_academicas;
$curso->profesor_id = $request->profesor_id;
$curso->save();
$curso->alumnos()->detach();
foreach ($request->alumno_ids as $alumno_id){
    $curso->alumnos()->attach($alumno_id);
}
return redirect()->action([CursoController::class, 'index']);

Crear las rutas Laravel (route)

Continuando, ahora vamos a definir las rutas de Laravel para los métodos “edit” y “update” correspondientes a las funcionalidades de Profesor, Alumno y Curso dentro del archivo web.php. Para realizar estas solicitudes a los métodos de nuestros controladores, emplearemos las funciones “Get” y “Put” de HTTP, respectivamente.

Route::get('/profesores/{id}/editar', [ProfesorController::class, 'edit'])->name('profesores.edit');
Route::put('/profesores/{id}', [ProfesorController::class, 'update'])->name('profesores.update');

Route::get('/alumnos/{id}/editar', [AlumnoController::class, 'edit'])->name('alumnos.edit');
Route::put('/alumnos/{id}', [AlumnoController::class, 'update'])->name('alumnos.update');

Route::get('/cursos/{id}/editar', [CursoController::class, 'edit'])->name('cursos.edit');
Route::put('/cursos/{id}', [CursoController::class, 'update'])->name('cursos.update');

Vistas Blade para actualizar registros

Por último, lo que haremos es crear las vistas para actualizar la información de las tablas de nuestra base de datos. En una primera instancia, implementaremos la navegabilidad en las vistas de los listados correspondientes a Profesores, Alumnos y Cursos. 

En el archivo index.blade.php de todas las vistas profesor, alumnos y cursos, en la cabecera de la tabla añadimos el siguiente código:

<th>Acción</th>

Dentro del bucle foreach, incorporamos la ruta que permitirá la redirección al formulario de edición.

<td>
    <a href="{{ route('profesores.edit', $profesor->id) }}">Editar</a>
</td>

Este proceso lo realizamos para las demás vistas index.blade.php de “Alumnos” y “Cursos”

Formulario actualizar profesores

Primeramente, en la ruta resources/views/profesores creamos el archivo edit.blade.php y dentro de este definimos el formulario de edición similar como lo realizamos en el formulario de crear, con la diferencia que en el formulario cargamos los datos enviados desde el método “edit” del controlador “ProfesorController”.

En el formulario añadimos la directiva “method_field(‘PUT’)” para indicar que la solicitud HTTP debe tratarse como una petición PUT. Esto es esencial porque, por defecto, los formularios HTML generados por Laravel utilizan el método POST.

@extends('layout')
@section('content')
    <h2>Editar Profesor</h2>
    <form action="{{ route('profesores.update', $profesor->id) }}" method ="POST">
        @csrf
        {{ method_field('PUT') }}
        <label>Nombres y Apellidos:</label>
        <input type="text" name="nombre_apellido" placeholder="Nombres y Apellidos" value="{{ $profesor->nombre_apellido }}">
        <label>Profesión:</label>
        <input type="text" name="profesion" placeholder="Profesión" value="{{ $profesor->profesion }}">
        <label>Grado Academico:</label>
        <input type="text" name="grado_academico" placeholder="Grado Academico" value="{{ $profesor->grado_academico }}">
        <label>Teléfono:</label>
        <input type="text" name="telefono" placeholder="Teléfono" value="{{ $profesor->telefono }}">
        <input type="submit" value="Guardar">
    </form>
@endsection

Recuerda, que estamos utilizando la herencia de plantillas en la funcionalidad de profesores. De manera similar, aplicaremos el mismo concepto en la vista de edición.

Formulario actualizar alumnos

En el formulario de edición de alumnos realizamos los mismos pasos. Primeramente, crearemos el archivo edit.blade.php en el directorio resources/views/alumnos, y escribimos el siguiente código:

<x-layout>
    <h2>Editar alumno</h2>
    <form action="{{ route('alumnos.update', $alumno->id) }}" method ="POST">
        @csrf
        {{ method_field('PUT') }}
        <label>Nombres y Apellidos:</label>
        <input type="text" name="nombre_apellido" placeholder="Nombres y Apellidos" value="{{ $alumno->nombre_apellido }}">
        <label>edad:</label>
        <input type="text" name="edad" placeholder="Edad" value="{{ $alumno->edad }}">
        <label>Teléfono:</label>
        <input type="text" name="telefono" placeholder="Teléfono" value="{{ $alumno->telefono }}">
        <label>Dirección</label>
        <input type="text" name="direccion" placeholder="Dirección" value="{{ $alumno->direccion }}">
        <input type="submit" value="Guardar">
    </form>
</x-layout>

Formulario actualizar cursos

Finalmente, exploraremos la vista de edición de cursos. Lo distintivo en este formulario con respecto a los demás son las relaciones que tiene con las tablas de Profesores y Alumnos. Con este propósito, implementaremos bucles foreach para mostrar en la vista todos los profesores y alumnos, respectivamente, e identificaremos cuáles están asociados al curso.

<x-layout>
<h2>Editar Curso</h2>
<form action="{{ route('cursos.update', $curso->id) }}" method ="POST">
    @csrf
    {{ method_field('PUT') }}
    <label>Materia:</label>
    <input type="text" name="materia" placeholder="Materia" value="{{ $curso->materia }}">
    <label>Nivel:</label>
    <input type="text" name="nivel" placeholder="Nivel" value="{{ $curso->nivel }}">
    <label>Horas Academicas:</label>
    <input type="text" name="horas_academicas" placeholder="Horas Academicas" value="{{ $curso->horas_academicas }}">
    <select id="profesor_id" name="profesor_id">
        @foreach($profesores as $profesor)
            @if($profesor->id == $curso->profesor_id)
                <option value="{{$profesor->id}}" selected> {{ $profesor->nombre_apellido }}</option>
            @else
                <option value="{{$profesor->id}}"> {{ $profesor->nombre_apellido }}</option>
            @endif
        @endforeach
    </select>
    <select id="alumno_ids" name="alumno_ids[]" multiple>
        @foreach($alumnos as $alumno)
            @php $valor = 0; @endphp
            @foreach($curso->alumnos as $alumno_curso_valor)
                @if($alumno->id == $alumno_curso_valor->id)
                    @php $valor = 1; @endphp
                @endif
            @endforeach
            @if($valor == 1)
                <option value="{{$alumno->id}}" selected> {{ $alumno->nombre_apellido }}</option>
            @else
                <option value="{{$alumno->id}}"> {{ $alumno->nombre_apellido }}</option>
            @endif
        @endforeach
    </select>
    <input type="submit" value="Guardar">
</form>
</x-layout>

Realizamos las pruebas correspondientes de las funcionalidades implementadas. Recuerda que puedes descargar el código fuente de esta clase y todas las demás  clases en el repositorio de GitHub totalmente gratis.

Hasta aquí la clase de hoy CRUD en Laravel actualizar registros, en la siguiente clase continuaremos con la validación de los formularios en Laravel.

¡Te espero en la siguiente clase!

Saludos y éxitos.

Victor Peña

Victor Peña

Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.

1 comentario en “CRUD en Laravel actualizar registros”

  1. Pingback: Validación de formularios en Laravel - Norvic Software

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *