Cómo Crear un CRUD en Laravel 12: Guía Completa para Principiantes

Autor: J. Luis, 14 noviembre, 2025

Para programar un CRUD debemos crear un controlador con los métodos necesarios para gestionar los datos de una Tabla implementado las vistas y rutas.

Cómo Crear un CRUD en Laravel 12: Guía Completa para Principiantes

Comencemos tu primera aplicación web! Esta guía paso a paso está diseñada para principiantes en Laravel que desean dominar el concepto esencial de un CRUD (Crear, Leer, Actualizar y Eliminar).

Usaremos Laravel 12, el framework PHP más moderno, para construir un sistema de gestión de mascotas simple pero funcional.

Lo que aprenderás en este tutorial:

  1. Configuración Inicial: Cómo instalar Laravel 12 y preparar la base de datos para el proyecto.

  2. Modelos y Migraciones: Crearemos el Modelo Eloquent Pet y su respectiva migración para definir la estructura de la tabla de mascotas (nombre, tipo, etc.).

  3. Rutas y Controladores: Implementaremos las rutas RESTful y un Controlador (PetController) para manejar las cuatro operaciones CRUD:

  4. Vistas Blade: Diseñaremos las interfaces de usuario (vistas) utilizando el motor de plantillas Blade de Laravel.

No te preocupes si eres nuevo en PHP o en desarrollo web. Te explicaremos cada comando de la línea de comandos Artisan y cada concepto de Eloquent ORM con claridad.

¡Prepárate para construir tu primera aplicación CRUD en Laravel 12!

¿Qué es un CRUD y por qué Laravel 12?

¿Qué es un CRUD y por qué Laravel 12?

¿Qué es un CRUD y por qué Laravel 12?

Un CRUD (Crear, Reer, Actualizar, Detener) es la espina dorsal de la mayoría de las aplicaciones web. Es el sistema fundamental para organizar y manipular datos de forma eficiente, como un cuaderno digital interactivo.

Vamos a implementar un CRUD práctico para gestionar un registro de mascotas. Podrás:

  • Crear (C): Añadir nuevos registros de mascotas (nombre, tipo, raza, edad, etc.).

  • Leer (R): Visualizar y consultar toda la lista de mascotas.

  • Actualizar (U): Modificar los datos existentes de una mascota.

  • Eliminar (D): Borrar un registro permanentemente.

Utilizaremos Laravel 12, la última versión del framework PHP más popular. Laravel 12 destaca por su sintaxis elegante y sus "herramientas mágicas" (como Eloquent ORM y Blade Templates), que simplifican enormemente el desarrollo, permitiéndote construir la funcionalidad CRUD de manera rápida y limpia.


Paso 1: Prepara tu casita para mascotas (instalación)

Paso 1: Prepara tu casita para mascotas (instalación)

Paso 1: Prepara tu casita para mascotas (instalación)

Primero, asegúrate de tener:

  • PHP 8.2 o superior: Es como la comida básica para Laravel.
  • Composer: Una herramienta para instalar cosas (composer --version para verificar).
  • Laravel 12: Crea un proyecto nuevo con:

bash

composer create-project laravel/laravel mis-mascotas

Entra al proyecto:

cd mis-mascotas

Configura tu base de datos en .env. Para algo simple, usa SQLite:

  1. Crea un archivo database.sqlite en la carpeta database.

  2. Edita .env:

    text

    DB_CONNECTION=sqlite 
    DB_DATABASE=/ruta/absoluta/a/tu/proyecto/database/database.sqlite

 

📁 Estructura esencial del proyecto Laravel

project/
├── app/
│   └── Http/
│       └── Controllers/
│           └── PetController.php
│
├── resources/
│   └── views/
│       └── pets/
│           ├── index.blade.php      // lista de mascotas
│           ├── create.blade.php     // formulario de creación
│           ├── edit.blade.php       // formulario de edición
│           └── show.blade.php       // opcional
│
├── routes/
│   └── web.php                      // contiene Route::resource('pets', PetController::class)
│
├── database/
│   ├── migrations/
│   │   └── 2024_xx_xx_create_pets_table.php
│   └── seeders/
│       └── PetSeeder.php (opcional)
│
├── public/
│   └── index.php                    // punto de entrada del proyecto
│
├── app/
│   └── Models/
│       └── Pet.php                  // modelo del recurso
│
├── .env                             // configuración de base de datos
├── composer.json
└── artisan


Paso 2: Crea el modelo de las mascotas

Vamos a hacer un modelo Pet para nuestras mascotas:

bash

php artisan make:model Pet -m

Esto genera:

  • Un modelo en app/Models/Pet.php.
  • Una migración en database/migrations.

Abre la migración y define los datos de las mascotas:

php

public function up() {
    Schema::create('pets', function (Blueprint $table) {
        $table->id(); // ID único
        $table->string('name'); // Nombre de la mascota
        $table->string('type'); // Tipo: perro, gato, etc.
        $table->timestamps(); // Fechas de creación y actualización
    });
}

Ejecuta la migración:

bash

php artisan migrate

¡Listo! Ahora tienes una tabla pets en tu base de datos.


Paso 3: Configura el modelo

En app/Models/Pet.php, indica qué campos puede llenar:

php

class Pet extends Model {
    protected $fillable = ['name', 'type'];
}

Paso 4: Crea el controlador

Genera un controlador con recursos:

bash

php artisan make:controller PetController --resource

se usa en Laravel para generar un controlador tipo “resource controller”.

¿Qué hace exactamente el comando?

  • Crea un archivo de controlador llamado PetController.php

  • Lo coloca en app/Http/Controllers/

  • Incluye automáticamente todos los métodos CRUD que Laravel usa para manejar un recurso.

¿Qué es “--resource”?

La opción --resource le indica a Laravel:

"Genera un controlador con todos los métodos básicos para un recurso REST."

Es decir, crea un controlador con métodos como:

  • index()
  • create()
  • store()
  • show()
  • edit()
  • update()
  • destroy()

Sin esa opción, el controlador estaría vacío.

Resumen

Componente Función
php artisan Ejecuta comandos de Laravel
make:controller Crea un controlador
PetController Nombre del controlador
--resource Genera los métodos CRUD automáticamente

Paso 5: Define las rutas

Paso 5: Define las rutas

Paso 5: Define las rutas

En routes/web.php, añade:

php

Route::resource('pets', PetController::class);

Esto conecta URLs como /pets o /pets/{id} a las funciones del controlador.

crea automáticamente todas las rutas necesarias para un CRUD completo usando un controlador de recursos.

¿Qué significa?

Laravel toma la palabra 'pets' como el nombre del recurso y PetController como el controlador encargado de manejarlo.

Con una sola línea, Laravel genera 7 rutas distintas, cada una conectada a un método del controlador.

Rutas que genera

Método HTTP URL Acción Método del controlador
GET /pets Mostrar lista index()
GET /pets/create Formulario para crear create()
POST /pets Guardar nuevo store()
GET /pets/{id} Mostrar un registro show()
GET /pets/{id}/edit Formulario para editar edit()
PUT/PATCH /pets/{id} Actualizar update()
DELETE /pets/{id} Eliminar destroy()

¿Qué gana uno al usar Route::resource()?

  • Ahorras escribir ruta por ruta.
  • Mantienes un orden estándar REST.
  • Laravel conecta automáticamente cada URL con su método correspondiente del PetController.

Finalmente deducimos que esta línea:  

Route::resource('pets', PetController::class); 

👉 Le dice a Laravel: “Crea todas las rutas necesarias para que PetController maneje el CRUD de pets.”


Paso 6: Construye el CRUD en el controlador

Paso 6: Construye el CRUD en el controlador

Paso 6: Construye el CRUD en el controlador

Abre app/Http/Controllers/PetController.php y programa cada parte del CRUD:

Leer (Read) - Ver todas las mascotas

php

public function index() {
    $pets = Pet::all(); // Obtiene todas las mascotas
    return view('pets.index', compact('pets')); // Muestra la vista
}

Esto lista todas las mascotas en una página.

Crear (Create) - Añadir una mascota

  • Mostrar formulario:

php

public function create() {
    return view('pets.create'); // Vista con formulario
}
  • Guardar la mascota:

php

public function store(Request $request) {
    Pet::create($request->all()); // Crea la mascota con los datos del formulario
    return redirect()->route('pets.index')->with('success', '¡Mascota añadida!');
}

Actualizar (Update) - Editar una mascota

  • Mostrar formulario de edición:

php

public function edit($id) {
    $pet = Pet::findOrFail($id); // Busca la mascota por ID
    return view('pets.edit', compact('pet')); // Muestra el formulario con datos
}
  • Guardar cambios:

php

public function update(Request $request, $id) {
    $pet = Pet::findOrFail($id); // Encuentra la mascota
    $pet->update($request->all()); // Actualiza los datos
    return redirect()->route('pets.index')->with('success', '¡Mascota actualizada!');
}

Eliminar (Delete) - Borrar una mascota

php

public function destroy($id) {
    $pet = Pet::findOrFail($id); // Encuentra la mascota
    $pet->delete(); // La elimina
    return redirect()->route('pets.index')->with('success', '¡Mascota eliminada!');
}

Paso 7: Crea las vistas

Paso 7: Crea las vistas

Paso 7: Crea las vistas

Crea una carpeta resources/views/pets y añade estos archivos:

index.blade.php (Leer - Lista de mascotas)

php

<!DOCTYPE html>
<html>
<head>
    <title>Mis Mascotas</title>
</head>
<body>
    <h1>Lista de Mascotas</h1>
    @if(session('success'))
        <p style="color: green;">{{ session('success') }}</p>
    @endif
    <a href="{{ route('pets.create') }}">Añadir Mascota</a>
    <ul>
        @foreach($pets as $pet)
            <li>
                {{ $pet->name }} ({{ $pet->type }})
                <a href="{{ route('pets.edit', $pet->id) }}">Editar</a>
                <form action="{{ route('pets.destroy', $pet->id) }}" method="POST" style="display:inline;">
                    @csrf
                    @method('DELETE')
                    <button type="submit">Eliminar</button>
                </form>
            </li>
        @endforeach
    </ul>
</body>
</html>

create.blade.php (Crear - Formulario nuevo)

php

<!DOCTYPE html>
<html>
<head>
    <title>Añadir Mascota</title>
</head>
<body>
    <h1>Añadir Nueva Mascota</h1>
    <form action="{{ route('pets.store') }}" method="POST">
        @csrf
        <input type="text" name="name" placeholder="Nombre" required>
        <input type="text" name="type" placeholder="Tipo (perro, gato...)" required>
        <button type="submit">Guardar</button>
    </form>
    <a href="{{ route('pets.index') }}">Volver</a>
</body>
</html>

edit.blade.php (Actualizar - Formulario de edición)

php

<!DOCTYPE html>
<html>
<head>
    <title>Editar Mascota</title>
</head>
<body>
    <h1>Editar {{ $pet->name }}</h1>
    <form action="{{ route('pets.update', $pet->id) }}" method="POST">
        @csrf
        @method('PUT')
        <input type="text" name="name" value="{{ $pet->name }}" required>
        <input type="text" name="type" value="{{ $pet->type }}" required>
        <button type="submit">Actualizar</button>
    </form>
    <a href="{{ route('pets.index') }}">Volver</a>
</body>
</html>

Paso 8: ¡Prueba tu refugio virtual!

Paso 8: ¡Prueba tu refugio virtual!

Paso 8: ¡Prueba tu refugio virtual!

Inicia el servidor:

bash

php artisan serve

Ve a http://localhost:8000/pets. Podrás:

  • Ver la lista de mascotas (Leer).
  • Añadir una mascota nueva como "Luna - Gato" (Crear).
  • Editarla para cambiar su tipo a "Perro" (Actualizar).
  • Eliminarla si ya no está contigo (Eliminar).


Leido 4707 veces | 3 usuarios

Descarga del código fuente

Cómo Crear un CRUD en Laravel 12: Guía Completa para Principiantes

Accede al código fuente esencial de nuestra aplicación en formato ZIP ó TXT. Ideal para desarrolladores que desean personalizar o integrar nuestra solución.

  • [ Descargas: 6 ]

Compartir link del tutorial con tus amigos

Cuestionario de Implementación de un CRUD en Laravel

Amplia tus conocimientos sobre la implementación de un CRUD en Laravel 12

1. ¿Qué significa la sigla CRUD en el contexto de Laravel?

2. ¿Qué comando se utiliza para crear un nuevo proyecto en Laravel 12?

3. ¿Qué archivo define las rutas web en Laravel?

4. ¿Qué método HTTP se utiliza comúnmente para mostrar datos en una vista (Read)?

5. ¿Qué comando de Artisan genera un controlador con métodos CRUD predefinidos?

6. ¿Qué estructura de base de datos se utiliza comúnmente para almacenar datos en un CRUD?

7. ¿Qué es Eloquent ORM en Laravel?

8. ¿Qué comando se utiliza para crear una migración en Laravel?

9. ¿Qué función cumple el método 'store' en un controlador CRUD?

10. ¿Qué archivo Blade se utiliza comúnmente para mostrar los datos en una tabla?

11. ¿Qué método HTTP se utiliza para eliminar un registro en un CRUD?

12. ¿Qué función tiene el método 'update' en un controlador CRUD?

13. ¿Qué es un Seeder en Laravel?

14. ¿Qué comando ejecuta todas las migraciones pendientes en Laravel?

15. ¿Qué es un Request personalizado en Laravel?

CÓDIGO FUENTE: USD 0.00

Conversar con J.Luis

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú