Puntos clave:
- Las migraciones de Laravel proporcionan una forma estructurada y controlada por versiones de gestionar los cambios en el esquema de la base de datos, garantizando la coherencia entre entornos.
- El uso de migraciones simplifica la gestión de la base de datos, facilita las reversiones y favorece la colaboración entre desarrolladores, lo que permite un flujo de trabajo de desarrollo más eficaz.
Las Migraciones Laravel son fundamentales para gestionar los cambios en la base de datos de las aplicaciones Laravel. Ofrecen un enfoque organizado para sincronizar tu base de datos con el código base de tu aplicación en varios entornos.
Imagina que tu aplicación evoluciona con el tiempo y requiere cambios en la estructura de la base de datos o la adición de nuevas tablas. Las migraciones evitan que este proceso se convierta en un calvario manual y propenso a errores.
Cada archivo de migración lleva una marca de tiempo, lo que garantiza un historial claro de los cambios ejecutados en el orden en que se crearon. Esto simplifica tareas como retroceder a estados anteriores o aplicar cambios de forma incremental.
Este artículo proporciona un tutorial completo sobre la Migración Laravel, destacando su importancia, beneficios y uso práctico. Tanto si eres un principiante como un desarrollador experimentado, esta guía te proporcionará los conocimientos necesarios para utilizar eficazmente la Migración Laravel.
¿Qué son las Migraciones Laravel?
La migración de Laravel es un conjunto de instrucciones que definen los cambios que quieres hacer en el esquema de tu base de datos. Estos cambios pueden incluir la creación de nuevas tablas, la alteración de tablas existentes, la adición o modificación de columnas y la siembra de la base de datos con datos iniciales.
Al encapsular estos cambios en archivos de migración, Laravel garantiza que el esquema de tu base de datos permanezca sincronizado con la base de código de tu aplicación, lo que facilita la gestión de los cambios en la base de datos en distintos entornos de desarrollo y fases de despliegue.
Laravel te permite realizar migraciones sin preocuparte del sistema de base de datos específico que estés utilizando, ya sea MySQL, PostgreSQL, SQLite u otros soportados por Laravel. El framework abstrae la sintaxis específica de la base de datos, haciendo que las migraciones sean portátiles y adaptables a diferentes sistemas de bases de datos.
Desbloquea todo el potencial de las migraciones de Laravel con nuestro recurso definitivo.
Experimenta el poder de las Migraciones Laravel en Cloudways, agiliza tu flujo de trabajo de desarrollo con facilidad.
¿Por qué utilizar las migraciones de Laravel?
Las Migraciones Laravel ofrecen una gran cantidad de ventajas que las convierten en una herramienta imprescindible para los desarrolladores web que trabajan con el framework PHP Laravel. Exploremos algunas de las razones clave por las que elegirías utilizar Migraciones Laravel en tus proyectos de desarrollo web.
| Aspecto | Explicación |
| Gestión de esquemas de bases de datos | Las migraciones de Laravel ayudan a gestionar y controlar las versiones de los esquemas de la base de datos, lo que permite realizar cambios estructurados y organizados en la estructura de la base de datos a lo largo del tiempo. |
| Control de versiones | Las migraciones se rastrean en sistemas de control de versiones como Git, garantizando que los cambios en la base de datos puedan revisarse, revertirse o aplicarse fácilmente en todos los entornos de desarrollo. |
| Portabilidad de bases de datos | Laravel proporciona un enfoque agnóstico de las bases de datos, lo que te permite escribir los cambios de esquema una vez y cambiar fácilmente entre diferentes sistemas de bases de datos, como MySQL, PostgreSQL, SQLite o SQL Server. |
| Deshacer y recuperar | Las migraciones ofrecen herramientas para hacer retroceder o restablecer los cambios en la base de datos, lo que permite a los desarrolladores recuperarse de los errores, ajustar el esquema y mantener un estado estable de la base de datos. |
| Documentación | Las migraciones sirven como documentación para la evolución del esquema de la base de datos, ya que cada archivo de migración contiene una marca de tiempo y una descripción de los cambios realizados, lo que mejora la transparencia y la capacidad de mantenimiento de la base de código. |
| Historial y Control de Retroceso | Laravel realiza un seguimiento de las migraciones ejecutadas y ofrece limitaciones de retroceso, garantizando que las migraciones sean idempotentes y controladas en su aplicación y retroceso. |
| Integración perfecta con las pruebas | Esta integración permite a los desarrolladores crear bases de datos de prueba con el mismo esquema que la base de datos principal de la aplicación, lo que facilita la escritura y ejecución de pruebas relacionadas con la base de datos |
| Consistencia de la base de código | Al encapsular los cambios en la base de datos en archivos de migración, te aseguras de que todos los desarrolladores que trabajen en el proyecto puedan aplicar estos cambios de manera uniforme en los distintos entornos, desde las configuraciones de desarrollo local hasta los servidores de producción. |
| Gestión de dependencias | La función de gestión de dependencias simplifica el proceso de gestión de cambios complejos en la base de datos que dependen de la existencia de determinadas estructuras. |
| Colaboración | Como el esquema de la base de datos se define en código, varios desarrolladores pueden trabajar en él simultáneamente, y cualquier cambio en el esquema puede compartirse y fusionarse fácilmente utilizando sistemas de control de versiones como Git. Esto agiliza el proceso de desarrollo y reduce los conflictos. |
Conceptos básicos de migración
Cuando estás empezando a construir con Laravel, debes entender las migraciones. Las migraciones son una forma de versionar tu esquema de base de datos. Te permiten modificar el esquema de tu base de datos de forma estable y controlada.
Para crear una nueva migración, ejecuta el comando make:migration en el terminal. Si tuvieras que hacer una migración para añadir una nueva tabla llamada productos, por ejemplo, ejecutarías
php artisan make:migration create_products_table
Esto generará un nuevo archivo de migración en el directorio base de datos/migraciones de tu proyecto.
Estructura de la migración
Un archivo de migración contiene normalmente dos métodos: ascendente y descendente. El método ascendente se aplica para modificar el esquema de tu base de datos, y el método descendente se utiliza para revertir las modificaciones. Este es un ejemplo de cómo podría ser un fichero de migración:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
class CreateProductsTable extends Migration
{
public function up()
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('description');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('products');
}
Aquí, el método up crea una tabla con el nombre de productos, y el método down la elimina.
Comandos comunes de migración
Una vez realizada la migración, puedes ejecutarla con los siguientes comandos:
- php artisan migrar: Ejecuta todas las migraciones pendientes.
- php artisan migrate:rollback: Deshace la última migración ejecutada.
- php artisan migrate:reset: Deshace todas las migraciones.
- php artisan migrate:refresh: Deshace todas las migraciones y luego las vuelve a ejecutar.
Estos comandos son importantes para mantener los cambios en el esquema de tu base de datos.
Tipos de datos y restricciones
En Laravel, viene con una variedad de tipos de datos y restricciones. Puedes utilizar estos tipos de datos y restricciones en tus migraciones para definir la estructura de las tablas de tu base de datos con bastante facilidad.
Tipos de datos de columna
Estos son algunos de los tipos de datos más utilizados:
- $table->id(): Esto es para una clave primaria autoincrementable.
- $table->string(‘nombre_columna’): Refleja una columna de cadena con una longitud máxima de 255 caracteres.
- $table->integer(‘nombre_columna’): Representa una columna entera.
- $table->timestamps(): Este tipo de datos añadirá automáticamente las columnas timestamp created_at y updated_at.
- $table->foreignId(‘nombre_columna’): Esto sirve para reflejar una columna de clave foránea que hace referencia a la columna id de otra tabla.
Restricciones
Las restricciones ayudan a garantizar la integridad de los datos, aplicando reglas a los datos almacenados en tus tablas:
- Clave primaria: $table->primary(‘nombre_columna’)
- Clave foránea: $table->foreign(‘nombre_columna’)->references(‘id’)->on(‘otra_tabla’)
- Restricción única: $table->unique(‘nombre_columna’)
- Índice: $table->index(‘nombre_columna’)
Aquí tienes un ejemplo que utiliza algunos de estos tipos de datos y restricciones:
Schema::create('orders', function (Blueprint $table) {
$table->id();
$table->foreignId('customer_id')->constrained();
$table->string('order_number')->unique();
$table->timestamps();
});
En el bloque de código anterior, el ejemplo es para customer_id. Es una clave externa que hace referencia a la columna id de la tabla clientes, y número_pedido es una cadena única.
¿Cómo implementar la migración a Laravel?
Crear una migración en Laravel es fundamental para gestionar los cambios en el esquema de tu base de datos. Repasemos el proceso de creación de una migración sencilla para comprender mejor su estructura.
Paso 1: Crear una migración
En Laravel, puedes crear una migración utilizando el comando make:migration Artisan. Abre tu terminal y navega hasta el directorio de tu proyecto Laravel. A continuación, ejecuta el siguiente comando:
php artisan make:migration create_example_table
Este comando creará un nuevo archivo de migración en el directorio database/migrations con un nombre como 2023_09_18_000000_create_example_table.php. La marca de tiempo en el nombre del archivo garantiza que las migraciones se ejecuten en el orden en que se crearon.

Paso 2: Definir el esquema
Abre el archivo de migración recién creado utilizando un editor de código o el editor de texto de línea de comandos que prefieras. Encontrarás dos métodos en el archivo de migración: ascendente y descendente. El método ascendente define los cambios que quieres hacer en el esquema de tu base de datos, mientras que el método descendente especifica cómo revertir esos cambios.
Aquí tienes un ejemplo de migración simple que crea una tabla llamada ejemplo con dos columnas:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateExampleTable extends Migration
{
public function up()
{
Schema::create('example', function (Blueprint $table) {
$table->id(); // Auto-incremental primary key
$table->string('name'); // A string column
$table->text('description')->nullable(); // A text column (nullable)
$table->timestamps(); // Created_at and updated_at timestamps
});
}
public function down()
{
Schema::dropIfExists('example');
}
}
Paso 3 : Añadir columnas en la tabla
Ejecuta el siguiente comando para crear un nuevo archivo de migración que añada una nueva_columna a la tabla de ejemplo:
php artisan make:migration add_new_column_to_example_table --table=example
Actualizar el Fichero de Migración:
Abre el archivo de migración recién creado (por ejemplo, 2023_09_18_123456_add_new_column_to_example_table.php) y modifica los métodos de subida y bajada como se indica a continuación:
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddNewColumnToExampleTable extends Migration
{
public function up()
{
Schema::table('example', function (Blueprint $table) {
$table->string('new_column')->nullable(); // Adding a new column
});
}
public function down()
{
Schema::table('example', function (Blueprint $table) {
$table->dropColumn('new_column'); // Dropping the added column
});
}
}
Paso 4: Ejecutar la migración
Para aplicar la migración y crear la tabla de ejemplo en tu base de datos, ejecuta el siguiente comando de Artisan:
php artisan migrate
Este comando ejecuta todas las migraciones pendientes. Laravel mantiene un registro de las migraciones que ya se han ejecutado en la tabla migraciones de tu base de datos.

Potencia tus migraciones Laravel con el alojamiento Cloudways
Disfruta de un alojamiento sin complicaciones para tus migraciones a Laravel y libera todo el potencial de tus proyectos web
Sembradoras y Migraciones
Los sembradores son un mecanismo para sembrar tu base de datos con los primeros datos. Los sembradores suelen ir emparejados con migraciones para inicializar inicialmente tu base de datos de la forma adecuada. Para generar un sembrador, utiliza el comando make:seeder como se muestra a continuación:
php artisan make:seeder UsersTableSeeder
Esto creará un nuevo archivo de sembradoras dentro del directorio base de datos/sembradoras.
Ejemplo Sembradora
Aquí tienes un ejemplo de una sembradora básica que rellena la tabla de usuarios con algunos datos de la sembradora:
use Illuminate\Database\Seeder;
use App\Models\User;
class UsersTableSeeder extends Seeder
{
public function run()
{
User::create([
'name' => 'John Doe',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
User::create([
'name' => 'Jane Doe',
'email' => '[email protected]',
'password' => bcrypt('password'),
]));
}
Sembradoras en funcionamiento
Ahora puedes ejecutar fácilmente un sembrador con sólo añadirlo a tu clase DatabaseSeeder. Servirá como punto de entrada para ejecutar sembradoras:
use Illuminate\Database\Seeder;
use App\Models\User;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
$this->call([
UsersTableSeeder::class,
]);
}
}
A continuación, puedes ejecutar la sembradora mediante el siguiente comando:
php artisan db:seed
Los sembradores proporcionan un método fácil de sembrar tu base de datos con datos, especialmente para el desarrollo o para inicializar un nuevo proyecto.
Tratamiento de errores y resolución de problemas
Durante la migración, pueden producirse errores. Algunos de ellos se indican a continuación, junto con soluciones sobre qué hacer:
Errores comunes
- SQLSTATE[42S01]: La tabla o vista base ya existe.
Causa: Intentando crear una tabla que ya existe.
Solución: Asegúrate de que tus archivos de migración no tienen la creación involuntaria de la misma tabla dos veces. Antes de crear la tabla debes ejecutar Schema::dropIfExists(‘nombre_tabla’).
- SQLSTATE[42S02]: No se ha encontrado la tabla o vista base:
Causa: Se intenta modificar o eliminar una tabla inexistente.
Solución: Asegúrate de que la tabla existe antes de intentar modificarla o eliminarla. Comprueba el orden de migración y asegúrate de que la tabla se crea primero antes de hacer referencia a ella.
- SQLSTATE[23000]: Violación de restricción de integridad:
Causa: Intentar insertar datos que violan una restricción (por ejemplo, insertar un valor duplicado en una columna única).
Solución: Valida tus datos para asegurarte de que cumplen las restricciones especificadas en tus migraciones.
Estrategias de gestión de errores
- Haz una copia de seguridad de tu base de datos: Nunca olvides hacer una copia de seguridad de tu base de datos antes de ejecutar migraciones, sobre todo en producción.
- Migraciones de prueba: Prueba tus migraciones en un entorno de ensayo o desarrollo antes de aplicarlas en producción.
- Deshacer y Actualizar: En caso de error, emplea migrate:rollback para deshacer los cambios y posteriormente migrate:refresh para aplicar todas las migraciones.
Adoptando estas estrategias, es posible minimizar el riesgo de errores y conseguir una gestión del esquema de la base de datos sin fisuras.
Otros comandos de migración
Modificar los índices de la base de datos, incluyendo añadirlos, renombrarlos o eliminarlos, puede hacerse utilizando las migraciones de Laravel. Vamos a recorrer el proceso para cada una de estas acciones.
Añadir al índice
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
Schema::table('users', function (Blueprint $table) {
$table->index('email');
});
Renombrar índice
Para renombrar un índice puedes utilizar, por ejemplo, renameIndex(),
$table->renameIndex('email', 'mobile_no');
Eliminar índice
Para eliminar un índice puedes utilizar, por ejemplo, dropIndex(),
$table->dropIndex('email');
Uso de restricciones de clave foránea
Laravel puede ayudarte a crear restricciones de clave foránea, que garantizan que los datos de tu base de datos se mantengan coherentes y sigan las relaciones entre las distintas tablas.
$table->foreignId('id')
constrained('users')
cascadeOnUpdate()
cascadeOnDelete();
Conclusión
En conclusión, Migración Laravel simplifica la gestión de bases de datos en las aplicaciones Laravel. Ofrece control de versiones, portabilidad de la base de datos, soporte de colaboración, capacidades de reversión, y consistencia y documentación mejoradas.
Estas ventajas mejoran colectivamente el proceso de desarrollo, haciéndolo más eficiente y fiable, al tiempo que contribuyen a la mantenibilidad de los proyectos Laravel.
En este blog hemos cubierto los aspectos fundamentales y avanzados del uso de las migraciones para crear, gestionar y modificar eficazmente el esquema de tu base de datos.
Si tienes alguna pregunta, no dudes en hacerla en los comentarios.
P) ¿Qué son las migraciones en Laravel?
A) Las migraciones de Laravel son archivos controlados por versiones que definen los cambios en el esquema de la base de datos. Ayudan a los desarrolladores a crear, modificar y compartir estructuras de bases de datos en múltiples entornos sin alterar manualmente las tablas. Las migraciones garantizan la coherencia y hacen más eficiente la gestión de la base de datos.
P) ¿Es necesaria la migración en Laravel?
R) Aunque las migraciones no son obligatorias en Laravel, son muy recomendables. Agilizan la gestión del esquema de la base de datos, facilitando el seguimiento de los cambios, la colaboración con los equipos y el mantenimiento del control de versiones sin ediciones manuales.
P) ¿Cómo migrar archivos en Laravel?
A) En Laravel, puedes migrar los archivos de la base de datos ejecutando el comando
php artisan migrate
Esto aplica todas las migraciones pendientes y actualiza el esquema de la base de datos basándose en tus archivos de migración. Asegúrate de que tu base de datos está configurada correctamente en el archivo .env antes de ejecutar el comando.
P) ¿Por qué debería utilizar Laravel Migrations?
A) Las Migraciones Laravel simplifican la gestión de bases de datos proporcionando control de versiones, asegurando la coherencia entre entornos y permitiendo modificaciones de esquema sin fisuras. Permiten el agnosticismo de la base de datos, facilitando el cambio entre distintos sistemas de bases de datos. Además, las migraciones ayudan a los equipos a colaborar eficientemente mediante el seguimiento de los cambios estructurales y el mantenimiento de una clara evolución del esquema de la base de datos.
P) ¿Puedo deshacer las migraciones de Laravel?
R) Sí, puedes deshacer las migraciones de Laravel utilizando el comando
php artisan migrate:rollback
Esto deshace el último lote de migraciones, permitiéndote revertir los cambios recientes en el esquema de la base de datos. Si es necesario, puedes especificar el número de pasos a deshacer utilizando la opción –step.
P) ¿Es posible ejecutar migraciones Laravel en un entorno de pruebas?
R) Sí, puedes ejecutar migraciones de Laravel en un entorno de pruebas utilizando:
php artisan migrate --env=testing
El entorno de pruebas de Laravel utiliza por defecto una base de datos SQLite en memoria, pero puedes configurarla para que coincida con la configuración de la base de datos de tu aplicación en el archivo phpunit.xml.
P) ¿Cuál es la mejor práctica para la migración a Laravel?
A) Las mejores prácticas para las migraciones de Laravel incluyen mantener organizados los archivos de migración, utilizar nombres descriptivos de tablas y columnas, escribir migraciones reversibles y evitar las modificaciones de datos dentro de los archivos de migración. Prueba siempre las migraciones en un entorno de ensayo antes de desplegarlas en producción.
P) ¿Cuál es el beneficio de la migración en Laravel?
A) Las migraciones de Laravel simplifican la gestión de la base de datos al permitir el control de versiones, la coherencia entre entornos, las modificaciones sencillas del esquema y la colaboración fluida entre desarrolladores. Ayudan a mantener una base de datos estructurada y escalable.
P) ¿Cómo migrar un sitio Laravel?
A) Para migrar un sitio Laravel, primero, configura tu conexión a la base de datos en el archivo .env. A continuación, ejecuta php artisan migrate para aplicar las migraciones. Si necesitas rellenar la base de datos con datos semilla, utiliza php artisan migrate –seed. Si quieres actualizar todas las migraciones y empezar de cero, php artisan migrate:refresh hará retroceder y volverá a ejecutar todas las migraciones.
P) ¿Puedo modificar las columnas existentes en las migraciones de Laravel?
Sí, puedes modificar las columnas existentes en las migraciones de Laravel utilizando la función modificar del método tabla. Aquí tienes un ejemplo de cómo puedes hacerlo:
public function up()
{
Schema::table('your_table_name', function (Blueprint $table) {
$table->string('new_column_name')->change();
});
}
Salwa Mujtaba
Salwa Mujtaba es redactora de contenidos técnicos en Cloudways. Con una sólida formación en Informática y experiencia previa como jefa de equipo en Operaciones de Cloudways, aporta a sus escritos un profundo conocimiento de la Plataforma Cloudways. Salwa crea contenidos que simplifican conceptos complejos, haciéndolos accesibles y atractivos para los lectores. Cuando no está escribiendo, puedes encontrarla disfrutando de la buena música, leyendo un libro o pasando tiempo con su familia.