Hola, ¿Cómo están? Continuando con el curso de Laravel nivel intermedio hoy veremos el CRUD en Laravel 8 crear registros para almacenar datos en nuestra base de datos. Veremos el potencial que tiene Laravel para almacenar datos de una manera fácil y segura.
En clases previas, hemos desarrollado las funciones de un CRUD en Laravel para recuperar registros desde la base de datos. Estos registros son posteriormente mostrados en las vistas correspondientes de nuestra aplicación (Profesor, Alumno y Curso).
¡Empecemos!
Crear los controladores en Laravel
Laravel utiliza los métodos del CRUD create() y store() de nuestros controladores para crear nuevos registros y almacenarlos en una base de datos. Utilizaremos lo que es Eloquent ORM para almacenar datos de una forma más fácil y segura, en lugar de utilizar sentencias SQL.
Método Create y Store para la funcionalidad de Profesores
Empezaremos por la funcionalidad de registrar nuevos Profesores. En el método “create” del controlador “ProfesorController”, aquí lo único que haremos es redirigir a la vista del formulario de profesores ubicada en el directorio “resources/views/profesores”, la cual crearemos posteriormente.
return view('profesores.create');
En el método “store” utilizaremos Eloquent ORM, Primeramente creamos un objeto $profesor que es una nueva instancia del modelo “Profesor”, donde le pasaremos como parámetro la variable $request (es donde se encuentra toda la información registrada del formulario). Posteriormente vamos a llamar al método “save” para almacenar dicha información en la base de datos. Finalmente, regresamos a la vista del listado de profesores.
$profesor = new Profesor($request->all()); $profesor->save(); return redirect()->action([ProfesorController::class, 'index']);
Método Create y Store para la funcionalidad de Alumnos
Aplicamos el mismo procedimiento para la funcionalidad de registrar nuevos alumnos utilizaremos el controlador “AlumnoController”.
En el método “create” escribimos el siguiente código:
return view('alumnos.create');
En el método “store” escribimos el siguiente código:
$alumno = new Alumno($request->all()); $alumno->save(); return redirect()->action([AlumnoController::class, 'index']);
Método Create y Store para la funcionalidad de Cursos
Recordando un poco de las anteriores clases, existe una relación entre la tabla “cursos” con las tablas “profesores” y “alumnos”’. Para poder recuperar información de estas dos tablas, realizaremos las referencias en el controlador “CursoController”.
use App\Models\Alumno; use App\Models\Profesor;
En el método “create” del controlador “CursoController”, procederemos a recuperar todos los datos de las tablas “alumnos” y “profesores”. Posteriormente, enviaremos esta información a la vista “cursos”.
$profesores = Profesor::all(); $alumnos = Alumno::all(); return view('cursos.create', ['profesores' => $profesores, 'alumnos' => $alumnos]);
En el método “store” del controlador “CursoController”, seguimos una lógica similar a los métodos “store” de profesores y alumnos. La diferencia radica en la relación entre el modelo “Curso” y “Alumno”, que es una relación de muchos a muchos. Por lo tanto, debemos llenar la tabla pivot con los ‘Ids’ de cada tabla. Utilizando un bucle “foreach”, recorremos el array para recuperar los alumnos inscritos en este curso. El método “attach”, nos permitirá almacenar estos datos en nuestra tabla pivot de la base de datos.
$curso = new Curso($request->all()); $curso->save(); foreach ($request->alumno_ids as $alumno_id){ $curso->alumnos()->attach($alumno_id); } return redirect()->action([CursoController::class, 'index']);
Crear las rutas (route)
A continuación, vamos a definir las rutas para los métodos “create” y “store” 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 “Post” de HTTP, respectivamente.
Route::get('/profesores/create', [ProfesorController::class, 'create'])->name('profesores.create'); Route::post('/profesores', [ProfesorController::class, 'store'])->name('profesores.store'); Route::get('/alumnos/create', [AlumnoController::class, 'create'])->name('alumnos.create'); Route::post('/alumnos', [AlumnoController::class, 'store'])->name('alumnos.store'); Route::get('/cursos/create', [CursoController::class, 'create'])->name('cursos.create'); Route::post('/cursos', [CursoController::class, 'store'])->name('cursos.store');
Crear las vistas Blade
Ahora procederemos a diseñar las vistas para la funcionalidad de registrar nuevos registros para Profesor, Alumno y Curso. En este proceso, emplearemos HTML, CSS y Blade.
Para facilitar la navegación entre las ventanas de listado y los formularios de creación, incorporaremos enlaces que, al hacer clic, redirigirán a los respectivos formularios de creación para cada funcionalidad.
En el archivo index.blade.php de la vista “Profesores” añadimos el siguiente código:
<a class="new-button" href="{{ route('profesores.create') }}">Nuevo Profesor</a>
En el archivo index.blade.php de la vista “Alumnos” añadimos el siguiente código:
<a class="new-button" href="{{ route('alumnos.create') }}">Nuevo Alumno</a>
En el archivo index.blade.php de la vista “Cursos” añadimos el siguiente código:
<a class="new-button" href="{{ route('cursos.create') }}">Nuevo Curso</a>
Para darle estilo al diseño del botón en el archivo layout.blade.php agregaremos el siguiente código CSS.
.new-button { display: inline-block; padding: 10px 20px; text-decoration: none; background-color: #3498db; color: #ffffff; border-radius: 5px; transition: background-color 0.3s; } .new-button:hover { background-color: #2980b9; }
Formulario crear Profesores
Primeramente, creamos el archivo create.blade.php en el directorio “resources/views/profesores” posteriormente escribimos código para crear del formulario de profesores con los campos “Nombres y Apellidos”, “Profesión”, “Grado académico” y “Teléfono”. Si recordamos la clase Plantillas Blade en Laravel, hicimos uso de la herencia de plantillas en la funcionalidad de profesores. De manera similar, aplicaremos el mismo concepto en la vista de creación.
En la etiqueta “form”, especificamos la ruta de la acción y el método “POST” para enviar los datos a través del cuerpo de la solicitud HTTP. Finalmente, incluimos la directiva @csrf para agregar un token CSRF al formulario (Cross-Site Request Forgery) en los formularios HTML para prevenir posibles ataques en las peticiones).
@extends('layout') @section('content') <h2>Nuevo Profesor</h2> <form action="{{ route('profesores.store') }}" method ="POST"> @csrf <label>Nombres y Apellidos:</label> <input type="text" name="nombre_apellido" placeholder="Nombres y Apellidos"> <label>Profesión:</label> <input type="text" name="profesion" placeholder="Profesión"> <label>Grado Academico:</label> <input type="text" name="grado_academico" placeholder="Grado Academico"> <label>Teléfono:</label> <input type="text" name="telefono" placeholder="Teléfono"> <input type="submit" value="Guardar"> </form> @endsection
Para darle estilo al diseño del formulario en el archivo layout.blade.php agregaremos el siguiente código CSS.
input[type=text], select { width: 100%; padding: 12px 20px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } input[type=submit] { width: 100%; background-color: #4CAF50; color: white; padding: 14px 20px; margin: 8px 0; border: none; border-radius: 4px; cursor: pointer; } input[type=submit]:hover { background-color: #45a049; }
Para probar la funcionalidad, iniciamos el servidor local de Laravel desde la Terminal en la ruta de nuestro proyecto mediante el siguiente comando:
php artisan serve
Seguidamente, abrimos el navegador Chrome y en la URL http://127.0.0.1:8000/profesores/create llevamos a cabo las pruebas de la funcionalidad.
Formulario crear Alumnos
Realizamos los mismos pasos para la funcionalidad de crear nuevos alumnos. En primer lugar, creamos el archivo crear.blade.php en la ruta “resources/views/alumnos” y escribimos el siguiente código.
<x-layout> <h2>Nuevo Alumno</h2> <form action="{{ route('alumnos.store') }}" method ="POST"> @csrf <label>Nombres y Apellidos:</label> <input type="text" name="nombre_apellido" placeholder="Nombres y Apellidos"> <label>Edad:</label> <input type="text" name="edad" placeholder="Edad"> <label>Teléfono:</label> <input type="text" name="telefono" placeholder="Teléfono"> <label>Dirección:</label> <input type="text" name="direccion" placeholder="Dirección"> <input type="submit" value="Guardar"> </form> </x-layout>
Formulario crear Cursos
Por último, creamos el formulario para la funcionalidad de crear nuevos cursos. En este punto, es crucial tener en cuenta las relaciones existentes con las tablas “Profesores” y “Alumnos”. Si recordamos, desde el controlador “CursoController” enviamos como variables los listados de profesores y alumnos. Al crear un nuevo curso, seleccionaremos qué profesor está a cargo del curso y qué alumnos participan en él.
<x-layout> <h2>Nuevo Curso</h2> <form action="{{ route('cursos.store') }}" method ="POST"> @csrf <label>Materia:</label> <input type="text" name="materia" placeholder="Materia"> <label>Nivel:</label> <input type="text" name="nivel" placeholder="Nivel"> <label>Horas Academicas:</label> <input type="text" name="horas_academicas" placeholder="Horas Academicas"> <label>Profesor:</label> <select id="profesor_id" name="profesor_id"> @foreach($profesores as $profesor) <option value="{{$profesor->id}}"> {{ $profesor->nombre_apellido }}</option> @endforeach </select> <select id="alumno_ids" name="alumno_ids[]" multiple> @foreach($alumnos as $alumno) <option value="{{$alumno->id}}"> {{ $alumno->nombre_apellido }}</option> @endforeach </select> <input type="submit" value="Guardar"> </form>
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 crear registros, en la siguiente clase continuaremos con editar registros en Laravel.
¡Te espero en la siguiente clase!
Saludos y éxitos.

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.