Comunidad de diseño web y desarrollo en internet online

Configurar Base de Datos y crear tablas con Laravel

En los tutoriales anteriores, vimos una introdución al framework Laravel y aprendimos cómo instalar Laravel y Composer. De ahora en adelante comenzaremos un tutorial teórico - práctico de Laravel.

Crear un módulo de Usuarios con Laravel


Si bien no es el módulo más emocionante del mundo, lo considero práctico dado que hace falta en la mayoría de las aplicaciones. Para comenzar, necesitamos configurar nuestra base de datos y crear la tabla de usuarios.

Cómo configurar la base de datos en Laravel


Lo haremos en cuatro sencillos pasos:

1 - Abrimos el archivo database.php localizado en:

Código :

app/config/database.php


2 - En la línea 29, encontraremos lo siguiente:

Código :

'default' => 'mysql'


Si estamos trabajando con MySQL, como es mi caso, dejaremos la línea intacta, sino editaremos el valor entre comillas a sqlite, pgsql, etc. según sea el caso.
Entre las bases de datos soportadas por defecto en Laravel encontramos: MySQL, SQL Lite, PostgreSQL y SQL Server.


3 - Usamos PHPMyAdmin o cualquier otra herramienta de nuestra preferencia para crear la base de datos, en mi caso, con PHPMyAdmin y MySQL crearé una DB llamada “pruebalaravel”:

Código :

CREATE DATABASE `pruebalaravel` ;


4 - Una vez creada la DB debemos indicarle a Laravel el nombre de nuestra base de datos y un usuario con acceso a ella, para MySQL tenemos en el mismo archivo database.php lo siguiente (línea 55):

Código :

      'mysql' => array(
         'driver'    => 'mysql',
         'host'      => 'localhost',
         'database'  => 'pruebalaravel',
         'username'  => 'root',
         'password'  => 'CLAVE_ULTRA_SECRETA',
         'charset'   => 'utf8',
         'collation' => 'utf8_unicode_ci',
         'prefix'    => '',
      ),


Allí cambiamos ‘database’ por el nombre de nuestra base de datos:

Código :

'database'  => 'pruebalaravel',


Y más abajo el usuario que hayan configurado cuando instalaron MySQL, comúnmente ‘root’, luego, en la línea siguiente, el password que dependiendo de su instalación pudiese estar en blanco o ser una clave ultra secreta.

Una vez configurada la DB, veamos:

Cómo crear las tablas en la base de datos con Laravel


Para ello usaremos migraciones.

Las migraciones permiten configurar y modificar la estructura de una base de datos. Creando una especie de “control de versiones” de base de datos que puede ser usada por una o más personas dentro del equipo de desarrollo.

Por ejemplo:

  1. Inicialmente crearemos una tabla llamada “users”.
  2. En unas semanas necesitaremos otra tabla llamada “tasks”.
  3. Luego agregaremos un campo adicional llamado “role” en la tabla “users” para dividir los administradores de los usuarios normales.

Cada uno de estos pasos implicará crear una migración diferente con la que el framework sabrá cómo modificar la base de datos, tanto hacia el nuevo esquema (del paso 1 al paso 2) como al esquema anterior (por ejemplo: de vuelta al paso 2 desde el paso 3).

Ahora veamos:

Cómo instalar el sistema de migraciones en Laravel


Abrimos nuestra consola o terminal (recuerden usar la consola instalada por GIT si usan Windows) y tipeamos lo siguiente:

Código :

php artisan migrate:install


Artisan es la interface de comandos de consola que trae Laravel


Si configuramos bien la base de datos deberíamos recibir el siguiente mensaje:

Código :

Migration table created successfully


(Sino recibes este mensaje, vuelve al punto anterior sobre configurar la base de datos y revisa que todo esté bien)

¿Tabla de migración creada con éxito?
Sí, si vuelves a tu herramienta de base de datos (ej. PHPMyAdmin) verás la siguiente tabla:


Esta es una sencilla tabla que usa Laravel para conocer el estado de la migración en tu servidor, por ahora está vacía.

Siguiente paso:

Crear nuestra primera migración con Artisan y Laravel


Para ello ejecutamos el siguiente comando:

Código :

php artisan migrate:make create_user_table


Si todo salió bien, recibiremos un mensaje similar a éste:

Código :

Created Migration: 2013_09_03_211545_create_user_table
Generating optimized class loader


El primer mensaje (migración creada…) nos indica que fue creado el archivo donde vamos a:

Crear el esquema de nuestra tabla usando el Schema Builder


Abrimos el archivo localizado en:

Código :

app/database/migrations/2013_09_03_211545_create_user_table.php


El nombre del archivo además de lo especificado por nosotros (create_user_table) contiene una fecha/hora que permite indicarle al framework el orden en que fueron creadas las migraciones, en mi caso 2013_09_03_21...


Ok, abrimos el archivo, tenemos la siguiente estructura:

Código :

<?php

use Illuminate\Database\Migrations\Migration;

class CreateUserTable extends Migration {

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

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

}


Básicamente tenemos una clase llamada CreateUserTable y dentro tiene dos métodos up and down.

El método up servirá, en este caso, para definir nuestra tabla, reemplacemos el método vacío por lo siguiente:

Código :

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
        Schema::create('users', function($table)
        {
            $table->increments('id');
            
            $table->string('email');
            $table->string('password');
            $table->string('full_name');
            
            $table->timestamps();
        });
}


Dentro tenemos un llamado al [url=http://es.wikipedia.org/wiki/Facade_(patr%C3%B3n_de_dise%C3%B1o)]facade[/url] Schema::create que nos permite crear el esquema de una tabla usando una interfaz de PHP orientada a objetos, es decir, como si nuestra tabla fuera un objeto.

Schema::create acepta como primer parámetro el nombre de nuestra tabla, en este caso: “users”

El segundo parámetro es una closure o función anónima al cual se le inyecta el objeto $table, dicho objeto nos permitirá definir los campos de nuestra tabla, por ejemplo:

Código :

$table->increments('id');


Le dice a Laravel que nuestra tabla tendrá un campo de tipo auto incremento llamado id, el cual es muy común en MySQL.

Luego le decimos a Laravel que necesitamos un campo string llamado email:

Código :

$table->string('email');


Pero en MySQL no existe el campo de tipo “string”...

Laravel se encarga de ello convirtiendo al tipo adecuado de acuerdo a la base de datos que hayamos configurado al principio, en el caso de MySQL nuestro campo resultante será de tipo VARCHAR.

Lo mismo para password y full_name, al final tenemos lo siguiente:

Código :

$table->timestamps();


¿?

Básicamente este método le dice a Laravel que queremos crear 2 campos, uno llamado “created_at” y otro “updated_at” ambos de tipo TIMESTAMP que servirán para saber cuando fue creado o modificado cada uno de los registros de nuestra tabla.

Ok, ¿Están listos? Vamos a ejecutar la migración: vamos de nuevo a la consola y escribimos lo siguiente:

Código :

php artisan migrate


Si todo salió bien recibiremos un mensaje así:

Código :

Migrated 2013_..._create_user_table


Ahora corremos a ver el PHPMyAdmin y…


Voilà!

Sé que están emocionados con nuestra nueva tabla, pero -aunque suene doloroso- tendremos que deshacernos de ella, no se preocupen, crearemos una nueva más tarde y nadie notará la diferencia:

Reemplacemos el método down por lo siguiente:

Código :

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


Sí:

Código :

Schema::drop('users');


Es el fatídico método que eliminará nuestra recién creada tabla users, ahora tomen valor y escriban en la consola:

Código :

php artisan migrate:rollback


Recibiremos el siguiente mensaje:

Código :

Rolled back: 2013...create_user_table


Indicándonos que migración se ha descartado. Corremos a PHPMyAdmin pero nuestra tabla users… no está, it’s gone… Se ha ido.

¡No puede ser!

Rápidamente regresamos a la consola y tipeamos de nuevo:

Código :

php artisan migrate


Volvemos a PHPMyAdmin y ¡Nuestra tabla users está de nuevo con nosotros! Déjenla allí por ahora, la necesitaremos en un próximo tutorial.

Además de agregar drama a nuestra vida, el rolled back sirve tanto si cometimos un error definiendo una tabla, como si queremos regresar nuestra base de datos a un estado anterior. Más adelante aprenderemos un poco más sobre las migraciones en Laravel.

Es todo por ahora ¿Qué les pareció el tutorial? Cuéntanos en los comentarios. Además me gustaría saber si quieren que les explique un poco más sobre programación orientada a objetos en PHP 5.3, por ejemplo: ¿Qué es un namespace? En un próximo tutorial.

Usa los enlaces claves dentro del mismo tutorial para descubrir artículos interesantes relacionados con el tema.


Espero les haya gustado esta tercera parte, nos vemos en los comentarios y en la siguiente entrega.

Saludos a todos

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate