Buscar..
Migraciones
Para controlar su base de datos en Laravel es mediante el uso de migraciones. Crear migración con artesano:
php artisan make:migration create_first_table --create=first_table
Esto generará la clase CreateFirstTable. Dentro del método up puedes crear tus columnas:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFirstTable extends Migration
{
public function up()
{
Schema::create('first_table', function (Blueprint $table) {
$table->increments('id');
$table->string('first_string_column_name');
$table->integer('secont_integer_column_name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('first_table');
}
}
Al final para ejecutar todas sus clases de migraciones, puede ejecutar el comando artisan:
php artisan migrate
Esto creará sus tablas y sus columnas en su base de datos. Otros comandos de migración útiles son:
-
php artisan migrate:rollback
- Rollback la última migración de base de datos -
php artisan migrate:reset
- Deshacer todas las migraciones de bases de datos -
php artisan migrate:refresh
- Restablecer y volver a ejecutar todas las migraciones -
php artisan migrate:status
- Muestra el estado de cada migración
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 migración
Las migraciones en una aplicación Laravel 5 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
Dentro de una migración de base de datos
Cada migración debe tener un método up()
y un método down()
. El propósito del método up()
es realizar las operaciones requeridas para poner el esquema de la base de datos en su nuevo estado, y el propósito del método down()
es revertir cualquier operación realizada por el método up()
. Asegurarse de que el método down()
invierta correctamente sus operaciones es fundamental para poder revertir los cambios del esquema de la base de datos.
Un ejemplo de archivo de migración puede verse así:
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddLastLoggedInToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->dateTime('last_logged_in')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('last_logged_in');
});
}
}
Al ejecutar esta migración, Laravel generará el siguiente SQL para ejecutarse en su base de datos:
ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL
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.
Migraciones de retroceso
¿Qué sucede si desea revertir la última migración, es decir, la operación reciente, puede usar el comando awesome rollback
. Pero recuerde que este comando solo retrocede la última migración, que puede incluir múltiples archivos de migración
php artisan migrate:rollback
Si está interesado en revertir todas las migraciones de su aplicación, puede usar el siguiente comando
php artisan migrate:reset
Además, si eres un vago como yo y quieres retroceder y migrar con un solo comando, puedes usar este comando
php artisan migrate:refresh
php artisan migrate:refresh --seed
También puede especificar el número de pasos para revertir con la opción de step
. Al igual que esto hará retroceder 1 paso.
php artisan migrate:rollback --step=1