Seeders en Laravel
Inserción de datos iniciales o de prueba mediante Seeders en Laravel.
En proyectos reales, En el desarrollo de una aplicación, suele ocurrir que el esquema de base de datos cambia continuamente: se añaden campos, se refactorizan tablas, se crean relaciones, se aplican restricciones, etc. Hacer estos cambios a mano en phpMyAdmin (o en un SQL suelto) suele romper la trazabilidad, dificulta el trabajo en equipo y hace frágiles los despliegues entre entornos (local, preproducción, producción).
Es cierto que una vez desarrollada la aplicación, la base de datos sigue siendo un elemento crítico, pero menos frecuentes, presentando pocos cambios (es algo ideal…).
Laravel resuelve esto con migraciones: una forma versionada, repetible y automatizable de definir la estructura de la base de datos como código. En un equipo, todos comparten el mismo histórico de cambios, y el proyecto puede “levantar” la base de datos desde cero de forma consistente.
A su vez, laravel nos va a ofrecer la posibilidad de poblar de forma automatizada las tablas de la base de datos, constituyendo un entorno ideal para poder probar nuestra aplicación según la vamos desarrollando.
Estos datos serán datos fictícios o datos faker, y constituirán un entorno ideal para poder probar nuestra aplicación.
Es un fichero PHP (una clase) que permite crear/modificar/eliminar tablas en nuestra aplicación (podríamos decir que es el principal uso que le vamos a dar).
Además, permite mantener un versionado del esquema de la base de datos, lo que hace posible replicarlo exactamente en cualquier entorno (desarrollo, pruebas o producción, o cuando se clone el proyecto) simplemente ejecutando un comando.
Schema Builder es la API de Laravel que permite definir tablas, columnas, índices y restricciones de forma expresiva, sin necesidad de escribir SQL manualmente.
Se utiliza dentro de las migraciones para estructurar la base de datos mediante métodos como create, table, string, integer, foreignId, etc.
Cuando hablamos aquí de API, estamos indicando un conjunto de métodos públicos disponibles en Schema y Blueprint, que podemos usar directamente. Son intuitivos y no necesitamos conocer su implementación. Es una librería de utilidades que tenemos disponibles:
## Ejemplos de métodos disponibles
use Illuminate\Support\Facades\Schema;
Schema::create()
Schema::table()
$table->string()
$table->integer()
$table->foreignId()
$table->timestamps()
$table->unique()
Es el objeto que representa el diseño de una tabla durante la ejecución de una migración.
Su uso es implícito, ya que Laravel lo inyecta, cuando usamos los métodos dentro de Schema::create() o Schema::table(). Permite permite definir columnas, índices y claves foráneas utilizando una sintaxis fluida y orientada a objetos.
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('student', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->string('address');
$table->timestamps();
});
up() / down()
Esto permite que los cambios en la base de datos sean reversibles y controlados.
public function up(): void
{
Schema::create('student', function (Blueprint $table) {
$table->id();
$table->string('name');
});
}
public function down(): void
{
Schema::dropIfExists('student');
}
migrate / rollback / refresh son operaciones habituales ejecutadas desde Artisan:
Estas operaciones permiten gestionar la evolución del esquema de la base de datos de forma controlada.
Las migraciones se guardan en: database/migrations
Laravel registra qué migraciones se han ejecutado en una tabla interna llamada migrations
Aunque es algo que no vamos a usar, es interesante saber que el proyecto guarda el histórico de cambios en Git y la base de datos guarda el “estado aplicado” en la tabla migrations. Podríamos deshacer los 3 ultimos cambios por ejemplo o el último o deshacer todo, como veremos a continuación
php artisan make:migration create_students_table2.- Modificar una tabla existente
php artisan make:migration add_phone_to_students_table3.-Crear migración y modelo a la vez (opcional, pero común) Aunque no hemos visto qué es un modelo, lo vamos a necesitar para interactuar con la base de datos desde nuestra aplicación Lo estudiamos en el tema de modelos
php artisan make:model Student -mConvención de nombres :
Una migración típica tiene esta forma:
|
|
Puntos importantes :
Las principales acciones que vamos a realizar con las migraciones son las siguientes
Ejecutar todas las migraciones pendientes
php artisan migrateConsultar el estado de las migraciones
|
|
Deshacer última acción (última migración ejecutado)
|
|
Deshacer las últimas N migraciones ejecutadas
|
|
Reiniciar el esquema completo (rollback total + migrate)
|
|
Borrar todas las tablas y volverlo a crear (muy usado en desarrollo) Esta acción la haremos con mucha frecuencia
|
|
Borrar todo y además ejecutar los seeders
|
|
|
|
|
|
|
|
El tema de índices es muy importante y lo tenemos que tener muy claro
Índices y únicos
|
|
Regla práctica :