
A medida que crea su aplicación, puede acumular más y más migraciones a lo largo del tiempo. Esto puede hacer que su directorio de migración se infle con potencialmente cientos de migraciones. Si lo desea, puede «aplastar» sus migraciones en un solo archivo SQL. Para comenzar, ejecute el comando schema: dump:
esquema artesanal php: volcado
// Volcar el esquema de la base de datos actual y eliminar todas las migraciones existentes …
esquema artesanal de php: dump –prune
Son ideales para trabajar en equipo, dado que elimina la necesidad de enviar fragmentos de SQL a través de email, mensajería, etc. Los programadores simplemente necesitan generar una nueva migración, escribir los cambios a la base de datos en ella y el resto del equipo puede simplemente ejecutar la migración.
ESTRUCTURA DE MIGRACION
Una clase de migración contiene dos métodos: hacia arriba y hacia abajo. El método up se usa para agregar nuevas tablas, columnas o índices a su base de datos, mientras que el método down debe revertir las operaciones realizadas por el método up.
Dentro de estos dos métodos, puede utilizar el generador de esquemas de Laravel para crear y modificar tablas de forma expresiva. Para conocer todos los métodos disponibles en el generador de esquemas, consulte su documentación. Por ejemplo, la siguiente migración crea una tabla de vuelos:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFlightsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('flights');
}
}
Modificar tablas existentes
A veces, necesita cambiar su estructura de tabla existente como renaming/deleting
columnas. Lo que puede lograr creando una nueva migración. Y en el método up
de su migración.
//Renaming Column.
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('email', 'username');
});
}
El ejemplo anterior cambiará el nombre de la email column
de email column
de la users table
de users table
a username
de username
. Mientras que el siguiente código elimina un username
de username
columna de la tabla de users
.
IMPROTANTE: para modificar columnas, debe agregar la dependencia doctrine/dbal
al archivo composer.json
del proyecto y ejecutar la composer update
para reflejar los cambios.
//Droping Column
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('username');
});
}
LOS ARCHIVOS DE MIGRACION
Las migraciones en una aplicación Laravel viven en el directorio database/migrations
. Sus nombres de archivos se ajustan a un formato particular:
<year>_<month>_<day>_<hour><minute><second>_<name>.php
Un archivo de migración debe representar una actualización de esquema para resolver un problema particular. Por ejemplo:
2016_07_21_134310_add_last_logged_in_to_users_table.php
Las migraciones de la base de datos se mantienen en orden cronológico para que Laravel sepa en qué orden ejecutarlas. Laravel siempre ejecutará migraciones de la más antigua a la más nueva.
Generando archivos de migración
Crear un nuevo archivo de migración con el nombre de archivo correcto cada vez que necesite cambiar su esquema sería una tarea. Afortunadamente, el comando artisan
de Laravel puede generar la migración para usted:
php artisan make:migration add_last_logged_in_to_users_table
También puede usar los --table
y --create
con el comando anterior. Estos son opcionales y solo por conveniencia, e insertarán el código relevante en el archivo de migración.
php artisan make:migration add_last_logged_in_to_users_table --table=users
php artisan make:migration create_logs_table --create=logs
Puede especificar una ruta de salida personalizada para la migración generada usando la opción --path
. La ruta es relativa a la ruta base de la aplicación.
php artisan make:migration --path=app/Modules/User/Migrations
EJECUTANDO MIGRACIONES
Una vez que se haya escrito su migración, la ejecución aplicará las operaciones a su base de datos.
php artisan migrate
Si todo salió bien, verás una salida similar a la siguiente:
Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table
Laravel es lo suficientemente inteligente como para saber cuándo está ejecutando migraciones en el entorno de producción. Si detecta que está realizando una migración destructiva (por ejemplo, una que elimina una columna de una tabla), el comando de php artisan migrate
le pedirá confirmación. En entornos de entrega continua esto puede no ser deseado. En ese caso, use la bandera --force
para omitir la confirmación:
php artisan migrate --force
Si acaba de ejecutar migraciones, puede confundirse al ver la presencia de una tabla de migrations
en su base de datos. Esta tabla es lo que utiliza Laravel para realizar un seguimiento de las migraciones que ya se han ejecutado. Al emitir el comando migrate
, Laravel determinará qué migraciones aún deben ejecutarse, las ejecutará en orden cronológico y luego actualizará la tabla de migrations
para que se adapte.
Nunca debe editar manualmente la tabla de migrations
menos que sepa absolutamente lo que está haciendo. Es muy fácil dejar inadvertidamente su base de datos en un estado defectuoso en el que las migraciones fallarán.