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.
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:
- Inicialmente crearemos una tabla llamada “users”.
- En unas semanas necesitaremos otra tabla llamada “tasks”.
- 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
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
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.
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.
Por Alberto el 04 de Septiembre de 2013
Por pepto el 04 de Septiembre de 2013
Por alexis el 04 de Septiembre de 2013
Gracias.
Por Duilio el 04 de Septiembre de 2013
alexis-blog :
Gracias.
Ok, en este caso muchos proyectos los he trabajado yo sólo y aún así prefiero usar las herramientas del framework.
Me gusta más interactuar con la interfaz orientada a objetos que con PHPMyAdmin
La migración es más portable para otros motores de base de datos
Nunca debes subestimar ningún proyecto
Mantienes una sola forma para todos los proyectos, no importa si estás tú solo o es un grupo
Saludos
Por alexis el 05 de Septiembre de 2013
Un saludo,
Alexis
Por epileftro85 el 05 de Septiembre de 2013
Por Duilio el 05 de Septiembre de 2013
epileftro85 :
Gracias La próxima semana hablare sobre las rutas y los controladores, stay tuned
Por epileftro85 el 05 de Septiembre de 2013
Duilio :
epileftro85 :
Gracias La próxima semana hablare sobre las rutas y los controladores, stay tuned
Grandioso rutas, si pudieras tocar las rutas con filtros sería fantástico,
Por Duilio el 05 de Septiembre de 2013
epileftro85 :
Duilio :
epileftro85 :
Gracias La próxima semana hablare sobre las rutas y los controladores, stay tuned
Grandioso rutas, si pudieras tocar las rutas con filtros sería fantástico,
Seguro, pienso explicarlas de lo más simple hasta los detalles, es uno de mis features preferidos La cuestión es si necesitaré 1 o 2 artículos, si se extiende mucho dividiré en 2. Pero voy a cubrir todo eso seguramente
Por Duilio el 06 de Septiembre de 2013
alexis-blog :
Un saludo,
Alexis
Si tu proyecto nunca va a cambiar de motor de base de datos (por ejemplo siempre será MySQL), lo vas a trabajar tú solo siempre y tú sabes crear bien la base de datos (con sus respectivas claves foráneas, constrains, on delete, etc.) entonces no hay ninguna ventaja adicional...
Para una persona que quiera una DB más portable, que necesite mantener las versiones de la DB a medida que pasa el tiempo, etc. entonces sí tiene su utilidad.
Pero yo voy a enseñar la forma cómo se hace en Laravel y las mejores prácticas que considero, pero Laravel en sí no te obliga a usar algo o hacer las cosas de una forma, esa es una gran ventaja comparado a otros frameworks menos flexibles que he visto (incluido el mismo Symfony en la lista)
Por Carlos Omar el 06 de Septiembre de 2013
Por Roy el 06 de Septiembre de 2013
Por Jorge el 08 de Septiembre de 2013
Por xhava el 10 de Septiembre de 2013
Por SinSemilla el 10 de Septiembre de 2013
¿Encontraste algo interesante de "cristal cannabis"???
Saludos!
Por Duilio el 10 de Septiembre de 2013
SinSemilla :
¿Encontraste algo interesante de "cristal cannabis"???
Saludos!
Jajajajajajajaja, ¿Te diste cuenta?
Nice! Deja de estar leyendo mis pestañas
Al parecer cristal cannabis existe, pero ya todos estos lenguajes son demasiado estimulantes, Así que... Nada interesante allí
Por SinSemilla el 10 de Septiembre de 2013
Prometo no volver a revisar tus pestañas
Saludos!
Por penHolder el 10 de Septiembre de 2013
Por penHolder el 10 de Septiembre de 2013
Por Duilio el 11 de Septiembre de 2013
penHolder :
De hecho es gracioso porque sí existe en la vida real... bromeando con la pestaña fake me encontré con que sí existe en Google, al parecer alguien usó el patrocinio que Clab hizo gratuitamente para hacerse millonario LOL)
Me recuerda el caso de la cerveza Duff en Colombia
F debería ordenar a todos los narcos que detengan la produción de CC dado que es una marca registrada de Clab (aunque no, eso no suena como una buena idea )
Creo que algo sucedió también con la blue meth de Breaking Bad...
Por Jhon James el 13 de Septiembre de 2013
[email protected]
Por Duilio el 13 de Septiembre de 2013
Jhon James-blog :
[email protected]
mysql solamente es el nombre que usa Laravel, de hecho por debajo de eso no es mysql_* ni mysqli_* sino PDO lo que usa Laravel para conectarse a la base de datos MySQL.
PDO es mejor que mysqli (http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/)
Por AmadoDL el 27 de Septiembre de 2013
Código :
¿me pueden ayudar?
Por dot1993 el 14 de Octubre de 2013
Por Rick el 17 de Octubre de 2013
Hice todos los pasos al pie de la letra y todo muy bien, cuando doy el código de migrar para que se haga la tabla 'users' me marca que si lo hace, pero entrando a phpMyAdmin no me aparece que se haya creado.
¿A qué se puede deber?
Por Duilio el 17 de Octubre de 2013
Rick-blog :
Hice todos los pasos al pie de la letra y todo muy bien, cuando doy el código de migrar para que se haga la tabla 'users' me marca que si lo hace, pero entrando a phpMyAdmin no me aparece que se haya creado.
¿A qué se puede deber?
Cuando entras a PHPMyAdmin estás seleccionando la misma base de datos que configuraste en Laravel?
Por Rick el 17 de Octubre de 2013
Por Duilio el 17 de Octubre de 2013
Rick-blog :
Pareciera que la tabla migrate quedó con una fila que le indica a Laravel que la tabla Users ya fue migrada...
Vacía o borra la tabla migrations y vuelve a intentar
Por xadrijo el 25 de Octubre de 2013
Por miguel angel torres el 06 de Noviembre de 2013
Muchas gracias Dulio !!!!
Por fede0914 el 11 de Noviembre de 2013
Por Hanshavin el 28 de Noviembre de 2013
Por Duilio el 28 de Noviembre de 2013
Hanshavin-blog :
Estimado Hanshavin, en los próximos días es posible que mi novia te contacte para aclarar algunos puntos expuestos en tu comentario anterior.
De todas formas para demostrar legítimo amor, por favor:
1. Regístrate en Cristalab.com (es fácil, rápido, gratis y cool)
2. Envía 3 tweets diarios a @freddier solicitando un curso de Laravel en mejorando.la ()
Saludos!
Por ebuzz el 02 de Diciembre de 2013
Por Duilio el 02 de Diciembre de 2013
ebuzz :
Me alegra mucho Tienes un camino de tutos por delante aún. Y si luego de terminarlos quieres más puedes solicitar un curso de Laravel a @mejorandola.
Estoy en Twitter si tienes alguna duda (@sileence)
¡Saludos!
Por el 09 de Diciembre de 2013
Al insertar y modificar un registro no funcionan los campos definidos como "timestamp" que puede ser?
Por Duilio el 09 de Diciembre de 2013
Por el 09 de Diciembre de 2013
Por Duilio el 09 de Diciembre de 2013
Saludos!
Por el 09 de Diciembre de 2013
Por nanotime el 13 de Diciembre de 2013
[PDOException]
could not find driver
migrate:install [--database[="..."]]
?? u.u
Fuera de eso me encanta el tuto.
Por Duilio el 13 de Diciembre de 2013
Debería ser "mysql" por ejemplo.
Revisa el archivo y me cuentas!
Saludos.
Por nanotime el 13 de Diciembre de 2013
Luego de instalar el paquete, desapareció ese log, pero ahora aparece uno nuevo, bastante raro también:
[PDOException]
SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Ya he dado varias vueltas por stack overflow y no logro conseguir nada útil. Algunos mencionan que el servicio debe resetearse (lo hice, nada que responde) otros dicen que posiblemente no tenga el pdo_mysql instalado, pero revisando el phpinfo() resulta que si, que tengo instalado el pdo.
Hmm realmente como es la primera vez que trabajo con esto no se por donde irme, básicamente estoy buscando logs en google y probando lo que encuentre.
Por cierto, gracias por la ayuda
Por Jorge Ramirez el 16 de Diciembre de 2013
Por nando_colombia el 17 de Diciembre de 2013
Saludos desde Colombia
Por Amalia el 20 de Diciembre de 2013
Por iObed el 23 de Diciembre de 2013
me devuelve esto:
Could not open input file: artisan
Gracias de antemano
Por Duilio el 23 de Diciembre de 2013
iObed-blog :
me devuelve esto:
Could not open input file: artisan
Gracias de antemano
Asegúrate que estás tipeando el comando en la misma carpeta donde está instalado Laravel, en dicha carpeta encontrarás el archivo llamado "artisan"
Por Sergio el 30 de Enero de 2014
Gracias por el tutorial!
Por dll el 03 de Febrero de 2014
Muchas gracias.
Atte
Damián
Por dvico el 10 de Febrero de 2014
Espero que continues hasta el final.
Muchisimas gracias.
Por Alejandro el 12 de Febrero de 2014
Gracias!
Por vlady el 23 de Febrero de 2014
da error sale una direccion.. laravel/../vendor/.../Migrator.php online 301
Por Dimitri Acosta el 07 de Mayo de 2014
Sólo un pequeño detalle, cuando explicas lo que es un "Facade" no aparece el link, sale el código, digo esto por si quisieras corregirlo en algún momento, por todo lo demás está excelente.
Por Diego el 22 de Mayo de 2014
Por dgrinovero el 31 de Mayo de 2014
Por chuck el 04 de Junio de 2014
Por AlfonsoMonroyIV el 16 de Junio de 2014
Gracias por el tuto...
Por Rogelio el 04 de Julio de 2014
Por marcelo el 31 de Julio de 2014
Por alexgmaya el 12 de Octubre de 2014
Por AlexJL el 06 de Diciembre de 2014
Por rm el 05 de Marzo de 2015
Por Yickson el 13 de Abril de 2015
Inclusive hay algo no se si lo omitiste pero en esta versión cuando uno lanza el php artisan migrate lanza un error ya que hay un archivo que es nombrado .env y es donde debes cambiar todos los parametros con la base de datos realmente soy muy nuevo en este framework pero lo estoy empezando a aprender por todo lo bien que hablan de el y bueno la facilidad para crear sitios web súper rápidos, agradecido.
Por huleos el 19 de Agosto de 2015
Por jhony barboza montes el 27 de Enero de 2016
Por glaravel el 02 de Febrero de 2016
https://youtu.be/RD1hPR81b58
<iframe width="420" height="315" src="https://www.youtube.com/embed/RD1hPR81b58" frameborder="0" allowfullscreen></iframe>