Laravel, parte 4: Migraciones

Para continuar con nuestro pequeño proyecto vamos a crear una base de datos, que por el momento contará con una tabla para guardar usuarios. Esta base de datos será, en mi caso MySQL, pero si querés trabajar con otra como postgresql no hay problema, ya que Laravel nos permite desligarnos de la misma.

Entonces, yo iré a mi phpmyadmin y crearé la base de datos, a la que simplemente llamaré ‘laravel’ (no tengo mucha imaginación, lo sé)

Bien, ahora vamos a ir dentro de nuestro proyecto a app -> config -> database.php, editaremos este último archivo. Buscamos un array llamado ‘connections’ y editamos los valores de la base de datos que vamos a usar con los valores correspondientes. Yo en mi caso usaré mysql, así que quedará de este modo:

'mysql' => array(
   'driver' => 'mysql',
   'host' => 'localhost',
   'database' => 'laravel',
   'username' => 'miusuario',
   'password' => 'micontrasena',
   'charset' => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix' => '',
 ),

 

Migraciones

Laravel trabaja con algo llamado migraciones. La migraciones son distintas versiones de nuestra base de datos, en donde iremos construyendo nuestra su estructura mediante las tablas. Pero lo bueno de esto, es que si en algún momento necesitamos volver a una versión anterior lo podemos hacer de manera muy sencilla mediante rollback. Quizás, si has trabajado hasta ahora en proyectos pequeños o medianos tal vez no le veas utilidad, o sientas que es gastar pólvora en chimango, pero quién sabe, las migraciones pueden resultar muy útil más adelante.

Para instalar nuestras migraciones en la base de datos, vamos a abrir la consola de comandos, entrar en nuestro proyecto:

C:\xampp\htdocs\mi_proyecto_laravel

Y escribir lo siguiente:

php artisan migrate:install

Ahora, si vamos a nuestra base de datos, desde phpmyadmin, o el panel que tengas para ver la misma debería haberse creado una tabla con el nombre: “migrations”.

Bien, ahora sí, vamos a crear nuestra primer migración con la tabla: “users”. Así que simplemente, con la consola de comandos abierta escribimos:

php artisan migrate:make create_users_table

Bien, una vez que termine de crear la migración podemos ir a app -> database -> migrations y ahí dentro buscamos un archivo con varios números y guiones bajo (dependerá de la fecha y hora en que lo hayas hecho) y el nombre de la migración que acabamos de crear, en mi caso “2013_11_13_012411_create_users_table” Vamos a abrir este archivo:

Bien, seguramente verás una clase con el nombre: “CreateUsersTable” que extienda de otra llamada Migration, y a su vez esta clase tendrá dos métodos definidos, aunque vacíos. El método up() es el que le indicará a nuestra migración qué es lo que tiene que hacer, osea crear la tabla users con sus respectivas columnas. Mientras que el método down() se ejecutará cuando queramos revertir la migración, por ejemplo eliminar la tabla.

Así que primero editaremos el método up() con el siguiente código:

public function up()
 {
    Schema::table('users', function($table){
       $table->create();
       $table->increments('id');
       $table->string('email');
       $table->string('real_name');
       $table->string('password');
       $table->integer('level');
       $table->boolean('active');
       $table->timestamps();
    });
 }

Desde la clase Schema de Laravell llamamos al método table() que recibirá dos parámetros, el primero será el nombre de la tabla, en nuestro caso ‘users’ y una función que recibirá como parámetro un objeto para hacer referencia a la tabla. Dentro de esta función creamos la tabla:

$table->create();

Y definimos los métodos:

$table->increments('id');
$table->string('email');
$table->string('real_name');
$table->string('password');
$table->integer('level');
$table->boolean('active');
$table->timestamps();

Primero creamos un tipo de datos autoincrementable llamado id, que a su vez será la clave primaria de nuestra base:

$table->increments('id');

Mediante el nombre ‘id’ a Laravel le alcanza para comprender que es la clave primaria.

Y también creamos otras columnas: email, real_name, password, level y active:

$table->string('email');
$table->string('real_name');
$table->string('password');
$table->integer('level');
$table->boolean('active');

Y finalmente con el método timestamps() creamos dos columnas más, que servirán para tener un control de la fecha y la hora de cuándo un registro se inserta o se modifica:

$table->timestamps();

Y ahora para finalizar nuestra migración vamos a editar el contenido del método down() con el siguiente código:

public function down()
 {
    Schema::drop('users');
 }

Aquí simplemente eliminamos la tabla.

Entonces vamos a ejecutar nuestra migración para así crear la tabla ‘users’, escribiendo en la consola lo siguiente:

php artisan migrate

Con esto se ejecuta el método up() y debería haberse creado la tabla ‘users’. Podemos comprobarlo desde nuestro administrador de base de datos.

Ahora, sí queremos volver atrás nuestra migración debemos escribir lo siguiente:

php artisan migrate:rollback

Aquí se ejecuta el método down() y obviamente la tabla ‘users’ será eliminada.

Pero como nosotros vamos a trabajar con esta tabla en las siguiente publicaciones volveremos a ejecutar la migración:

php artisan migrate

Algo importante de aclarar es que en Laravel se acostumbra a trabajar con nombre de tablas en plural, aunque se puede romper con esta regla no es recomendable, yo en mi caso lo haré de la forma propuesta.

Bien, con esto terminamos. En la próxima publicación aprenderemos a trabajar con los registros de la base de datos mediante el modelo.

Saludos!

Anterior: Laravel, parte 3: Modelo Vista Controlador

Siguiente: Laravel, parte 5: Modelos

Redes sociables

    8 Replies to “Laravel, parte 4: Migraciones”

    1. Buenas tardes, mira tengo una consultar, quiero hacer una conexión con una BD en PostgreSQL y tengo configurada mi database.php de la siguiente manera:

      ‘pgsql’ => array(
      ‘driver’ => ‘pgsql’,
      ‘host’ => ‘localhost’,
      ‘database’ => ‘mibasededatos’,
      ‘username’ => ‘postgres’,
      ‘password’ => ‘micontraseña’,
      ‘charset’ => ‘utf8’,
      ‘prefix’ => ”,
      ‘schema’ => ‘public’,
      ‘port’ => ‘5432’, ),

      Lo que sucede es que cuando hago el controller, el modelo, etc… No me muestra nada, yo creo q el problema es aqui en la conexión. Si pudieras ayudarme te lo agradeceria mucho. Gracias !

    2. Hola, tengo un pequeño problemilla, cuando le doy al comando “php artisan migrate”, me sale este error:
      Cannot redeclare class CreateUsersTable
      Un saludo. y gracias desde ya.

      1. Porque ya hay una migración previa con esa tabla. Vas a tener que hacer rollback, para eliminarla y volverla a crear.

        Saludos!

        1. Hola ferchu:
          Yo tengo el mismo problema, y cuando hago un php artisan migrate:rollback

          Me dice: Nothing to RollBack
          No se que puede estar fallando.

          Mil gracias por cualquier ayuda

        2. Solucionado, existia en el proyecto otro file de creacion de users database.
          Lo elimine, segui tus pasos y todo funciono correctamente.
          Muchas gracias y espero que le sirva a alguien que pueda encontrarse con el mismo problema.

          Gracias de nuevo

    Comments are closed.