Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

Laravel migrations – Utiliazando migraciones en Laravel

Las migraciones en Laravel son como tener un control de versiones de tu base de datos, con ellas podemos crear de forma rápida el esquema de nuestra base de datos.

Con las migraciones tenemos un código el cual creara y modificara nuestras tablas en la base de datos.

Como creamos una migración en Laravel

También al igual que muchos otros elementos en Laravel, como pueden ser los modelos, los controles, otros podemos crear los migrations a través de la consola.

La sintaxis para crear una migración a través de la consola es la siguiente:

Project Folder
php artisan make:migration <create_users_table> [--create=table_name|--table=table_name]

si crea una migración sin los opcionales creara una migración vacía

Ejemplo: php artisan make:migration vacia

<?php

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

class Vacia extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

Como puede ver en este ejemplo una migración consta de 2 funciones en su interior una es up y la otra down.

Con la función up es cuando corremos la migración esta función hará lo que la migración deba hacer.

La función down es la que se ejecutara cuando corramos el comando rollback.

Spongamos que nos falto hacer algo en la migración pero ya corrimos muchas migraciones, obviamente en este caso nos falto el nombre de la propiedad precio cantidad de baños por ejemplo excretara.

Creando una migración para crear una tabla.

Veamos una migración con la opción --create table_name, siendo table_name el nombre de la tabla que queremos crear.

Supongamos que tenemos que crear una tabla de propiedades así que utilizaremos el siguiente comando:

Project Folder
php artisan make:migration crear_tabla_propiedades  --create=propiedades
PHP Warning:  Module "openssl" is already loaded in Unknown on line 0

Warning: Module "openssl" is already loaded in Unknown on line 0
Created Migration: 2022_04_17_014639_crear_tabla_propiedades

Este comando puede crear un código como el siguiente

database/migrations/2022_04_17_014639_crear_tabla_propiedades.php
<?php

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

class CrearTablaPropiedades extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('propiedades', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('propiedades');
    }
}

O también puede crear en versiones más nuevas de Laravel:

database/migrations/2022_04_17_014639_crear_tabla_propiedades.php
<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('propiedades', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('propiedades');
    }
};

Como puede ver, la migración en sí no es lo que crea en sí la tabla, sino esta porción de código.

database/migrations/2022_04_17_014639_crear_tabla_propiedades.php
Schema::create('propiedades', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});

Eso quiere decir que podemos crear varias tablas en una migración. Por otra parte, en el código de la función down verá:

database/migrations/2022_04_17_014639_crear_tabla_propiedades.php
Schema::dropIfExists('propiedades');

Con Schema::dropifExists estará eliminando la tabla si es que esta existe al correr el rollback.

Antes de correr php artisan migrate levante su base de datos no sea como yo 😂

Creando una migración para modificar una tabla en base de datos.

Veamos una migración con la opción --table=table_name, siendo table_name el nombre de la tabla a modificar.

En caso que tenga que modificar una tabla a la cual ya se ha migrado

Project Folder
php artisan make:migration modificar_tabla_propiedades --table=propiedades

Tenga en cuenta que en este ejemplo puse la fecha como XXXXXXXXX dado que no importa la fecha para estos ejemplos, no sabemos que fecha va a tener cuando usted cree su migración. El ejemplo con –create pusimos la fecha de creación para que sepa como se ve el archivo creado.

database/migrations/XXXXXXXXX_modificar_tabla_propiedades.php
<?php

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

class ModificarTablaPropiedades extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('propiedades', function (Blueprint $table) {
            $table->string('tipo');// se que lo deberia hacer de otra forma es solo para el ejemplo
            $table->string('direccion');
            $table->smallInteger('baños');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('propiedades', function (Blueprint $table) {
            $table->dropColumn('tipo');
            $table->dropColumn('direccion');
            $table->dropColumn('baños');
        });
    }
}

Seria bueno que viera los tipos de columnas y los tipos de modificadores dejo referencia abajo.

Ahora probaremos el rollback con php artisan migrate:rollback esto hara que se le haga un rollback a todo quedando sin tablas en la base de datos.

Otra cosa muy común es usar php artisan migrate:refresh de esta manera hará el rollback y rehará las tablas.

También podemos hacer un rollback un poco más elaborado por hacer solo un rollback hacia atrás. Veamos un ejemplo:

php artisan migrate:rollback --step=1

ejemplo de php artisan migrate:rollback –step=1

referencias:
https://laravel.com/docs/5.8/migrations#column-modifiers

Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category