Laravel ofrece una forma poderosa y flexible para gestionar bases de datos utilizando su ORM Eloquent. En este post, te mostraré cómo convertir el siguiente código SQL en su equivalente en Laravel mediante migraciones, modelos y controladores. Vamos a construir la funcionalidad completa para la tabla aseguradoras.

Código SQL original

El siguiente código SQL crea una tabla llamada aseguradoras con varios campos, como clave_aseguradora, nombre, fecha_inicial, fecha_final, y no_seguro

CREATE TABLE aseguradoras (
  clave_aseguradora int(11) NOT NULL,
  nombre VARCHAR(255) NOT NULL,
  fecha_inicial datetime NOT NULL,
  fecha_final datetime NOT NULL,
  no_seguro varchar(255) NOT NULL,
  PRIMARY KEY (clave_aseguradora)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
COMMIT;

Este código SQL crea una tabla llamada aseguradoras con los siguientes campos:

  • clave_aseguradora. Un entero que sirve como clave primaria.
  • nombre. Un campo de texto (VARCHAR) de longitud máxima de 255 caracteres.
  • fecha_inicial. Un campo de tipo datetime para la fecha inicial.
  • fecha_final.Un campo de tipo datetime para la fecha final.
  • no_seguro. Un campo de texto para el número de seguro.

Paso 1. Crear la migración

Laravel ofrece una herramienta llamada Artisan que facilita la creación de migraciones, modelos y controladores. Empezaremos creando la migración correspondiente a la tabla aseguradoras.

1.1. Crear la migración, modelo y controlador

Ejecuta el siguiente comando para generar una migración, el modelo Aseguradora y el controlador AseguradoraController:

Este comando generará:

  1. Migración. Un archivo de migración en el directorio database/migrations/.
  2. Modelo. El modelo Aseguradora en el directorio app/Models/.
  3. Controlador. Un controlador llamado AseguradoraController en el directorio app/Http/Controllers/.

1.2. Editar la migración

Vamos a editar el archivo de migración que se encuentra en database/migrations/, para que coincida con la estructura de la tabla SQL proporcionada.

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAseguradorasTable extends Migration
{
    public function up()
    {
        Schema::create('aseguradoras', function (Blueprint $table) {
            $table->integer('clave_aseguradora')->primary(); // Clave primaria
            $table->string('nombre', 255);                   // Nombre VARCHAR(255)
            $table->dateTime('fecha_inicial');               // Fecha inicial DATETIME
            $table->dateTime('fecha_final');                 // Fecha final DATETIME
            $table->string('no_seguro', 255);                // No. de seguro VARCHAR(255)
            $table->timestamps();                            // Campos created_at y updated_at
        });
    }

    public function down()
    {
        Schema::dropIfExists('aseguradoras');
    }
}

1.3. Ejecutar la migración

Una vez que hayas editado la migración, ejecuta el siguiente comando para crear la tabla aseguradoras en tu base de datos:

php artisan migrate

Esto creará la tabla aseguradoras con la estructura definida.

Paso 2. Crear el modelo Aseguradora

El modelo en Laravel es una representación de una tabla en la base de datos y te permite interactuar con los registros de manera más sencilla. Ahora vamos a definir el modelo Aseguradora.

Modelo Aseguradora

Abre el archivo app/Models/Aseguradora.php y edítalo para reflejar la estructura de nuestra tabla:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Aseguradora extends Model
{
    use HasFactory;

    // Nombre de la tabla
    protected $table = 'aseguradoras';

    //Indicar la clave primaria correcta
    protected $primaryKey = "clave_aseguradora";

    // Clave primaria no auto-incremental
    public $incrementing = false;

    // Tipo de clave primaria
    protected $keyType = 'int';

    // Los campos que pueden asignarse de forma masiva
    protected $fillable = [
        'clave_aseguradora',
        'nombre',
        'fecha_inicial',
        'fecha_final',
        'no_seguro',
    ];

    // Indicamos que las fechas deben ser tratadas como objetos de tipo Carbon
    protected $dates = ['fecha_inicial', 'fecha_final'];
}

Explicación

  • $table. Define el nombre de la tabla en la base de datos.
  • $primaryKey. Define el nombre del campo que es llave primaria.
  • $incrementing = false. Especifica que la clave primaria (clave_aseguradora) no es auto-incremental.
  • $keyType = ‘int’. Define que la clave primaria es de tipo entero.
  • $fillable. Lista de los campos que pueden ser asignados masivamente.

Paso 3. Crear el controlador AseguradoraController

El controlador gestionará las operaciones CRUD (Crear, Leer, Actualizar y Eliminar) para la tabla aseguradoras. Laravel genera un controlador de recursos que incluye estos métodos básicos.

Abre el archivo app/Http/Controllers/AseguradoraController.php y edítalo para que contenga los métodos necesarios.

3.1. Mostrar todos los registros (método index)

public function index()
{
    // Obtener todos los registros
    $aseguradoras = Aseguradora::all();
    // Pasar los registros a la vista
    return view('aseguradoras.index', compact('aseguradoras')); 
}

3.2. Mostrar el formulario para crear un nuevo registro (método create)

public function create()
{
    // Mostrar el formulario de creación
    return view('aseguradoras.create'); 
}

3.3. Guardar un nuevo registro (método store)

public function store(Request $request)
{
    // Validar los datos recibidos del formulario
    $request->validate([
        'clave_aseguradora' => 'required|integer',
        'nombre' => 'required|string|max:255',
        'fecha_inicial' => 'required|date',
        'fecha_final' => 'required|date',
        'no_seguro' => 'required|string|max:255',
    ]);

    // Crear un nuevo registro
    Aseguradora::create($request->all());

    // Redirigir a la lista de aseguradoras con un mensaje de éxito
    return redirect()->route('aseguradoras.index')->with('success', 'Aseguradora creada con éxito');
}

3.4. Mostrar un registro específico (método show)

public function show(Aseguradora $aseguradora)
{
    return view('aseguradoras.show', compact('aseguradora'));
}

3.5. Mostrar el formulario de edición (método edit)

public function edit(Aseguradora $aseguradora)
{
    return view('aseguradoras.edit', compact('aseguradora'));
}

3.6. Actualizar un registro existente (método update)

public function update(Request $request, Aseguradora $aseguradora)
{
    // Validar los datos recibidos
    $request->validate([
        'clave_aseguradora' => 'required|integer',
        'nombre' => 'required|string|max:255',
        'fecha_inicial' => 'required|date',
        'fecha_final' => 'required|date',
        'no_seguro' => 'required|string|max:255',
    ]);

    // Actualizar el registro
    $aseguradora->update($request->all());

    // Redirigir con un mensaje de éxito
    return redirect()->route('aseguradoras.index')->with('success', 'Aseguradora actualizada con éxito');
}

3.7. Eliminar un registro (método destroy)

public function destroy(Aseguradora $aseguradora)
{
    $aseguradora->delete(); // Eliminar el registro
    return redirect()->route('aseguradoras.index')->with('success', 'Aseguradora eliminada con éxito');
}

Paso 4. Crear las vistas

Laravel utiliza Blade como motor de plantillas para las vistas. Vamos a crear las vistas necesarias para las operaciones CRUD.

4.1. Vista para mostrar todos los registros (index.blade.php)

Paso 5. Definir las Rutas

Laravel permite definir las rutas de forma automática utilizando el controlador de recursos. Asegúrate de que las rutas estén definidas en routes/web.php

use App\Http\Controllers\AseguradoraController;

Route::resource('aseguradoras', AseguradoraController::class);

Esto creará automáticamente todas las rutas necesarias para las operaciones CRUD.

Conclusión

En este post, hemos aprendido cómo convertir un código SQL en su equivalente en Laravel utilizando migraciones, modelos y controladores. Implementamos las operaciones CRUD completas y creamos vistas usando Blade para mostrar, crear, editar y eliminar registros de la tabla aseguradoras.

Laravel facilita enormemente el proceso de interactuar con bases de datos y realizar operaciones comunes como las que vimos en este post. ¡Si tienes alguna duda o comentario, no dudes en dejarlos abajo!