Vous êtes sur la page 1sur 10

27/3/2019 Modificando migraciones en Laravel – Styde.

net

¡Regresó el Plan Mensual! Únete por solo 12 USD

MENU 

Modificando migraciones en Laravel


 
 Curso: Tutoriales de Laravel 5.1

 Ver todas las lecciones

 Clemir Rondón  24/09/2015

 Composer, Laravel 5, Laravel 5.1  7 Comentarios

A medida que avanzamos en el desarrollo de una aplicación puede que las tablas
o los campos creados en la base de datos ya no se adapten o que simplemente
necesitamos hacer algunos cambios.  Sin embargo, para ese momento no es
posible hacer rollback a las migraciones hechas, pues, por ejemplo, la aplicación
ya está en producción. Por consiguiente, para modificar la base de datos debemos
hacer uso de las migraciones, tal y como lo hicimos al crear las tablas, pero ahora
para cambiarlas. Hoy vamos a ver cuáles opciones tenemos disponibles para ello.

Tomemos en cuenta que debemos tener el archivo de configuración .env creado y


con los datos de conexión a la base de datos.

Vamos a crear una migración para una tabla llamada profiles:

1 php artisan make:migration create_profiles_table --create=

y en los métodos up y down colocamos:

1 public function up()


2     {

https://styde.net/modificando-migraciones-en-laravel/ 1/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

3 ¡Regresó el Plan Mensual! Únete porfunction


        Schema::create('profiles', solo 12 USD
(Blueprint $t
4             $table->increments('id');

5             $table->string('name_company')->nullable();

6             $table->string('contact')->nullable();
7             $table->string('phone')->nullable();

8             $table->text('comments')->nullable();

9             $table->timestamps();
10         });

11     }

12  
13     /**

14      * Reverse the migrations.


15      *

16      * @return void

17      */
18     public function down()

19     {
20         Schema::drop('profiles');
21     }

Creamos el modelo Profile, ejecutando por consola:

1 php artisan make:model Profile

y añadimos lo siguiente a la clase creada en Profile.php ubicado en el directorio


app:

1 protected $table = 'profiles';


2 protected $fillable = ['name_company', 'contact', 'commen

Además, vamos a crear un model factory para agregar datos ficticios a nuestra
tabla profiles, en el archivo ModelFactories.php que se encuentra en el directorio
database/factories:

1 $factory->define(App\Profile::class, function ($faker) {


2 return [
3 'name_company' =>$faker->company,

https://styde.net/modificando-migraciones-en-laravel/ 2/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

4 ¡Regresó
'contact'=> el Plan Mensual! Únete por solo 12 USD
$faker->name,
5 'phone' => $faker->phoneNumber,
6 'comments' => $faker->paragraph

7 ];
8 });

Si no conoces cómo trabajar con ellos puedes consultar: Model Factories en


Laravel 5.1

Para ejecutar dicha migración hacemos por consola:

1 php artisan migrate --seed

Con lo cual obtenemos:

Antes de hacer los cambios que queremos a una columna debemos agregar a
nuestro composer.json una dependencia en la sección require:

1 "doctrine/dbal": "2.5.1"

y luego hacer composer update.

Doctrine es un ORM (Object Relational Mapper) que permite interactuar con la


base de datos desde código de PHP, sin trabajar directamente con consultas de
SQL, es decir, que está en la capa de abstracción de la base de datos.  Posee
muchas características como la introspección de esquema de base de datos,
https://styde.net/modificando-migraciones-en-laravel/ 3/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

gestión de esquema y abstracción


¡Regresó PDO. PorÚnete
el Plan Mensual! Doctrine
lo quepor DBAL
solo 12 USD es la biblioteca
usada por Laravel para determinar el actual estado de un columna o campo y
crear las consultas SQL necesarias para hacer los ajustes especificados a dicha
columna.

Esta dependencia es requerida según la documentación oficial de Laravel, si no la


agregas puedes obtener errores como:

[Symfony\Component\Debug\Exception\FatalErrorException]
Class ‘Doctrine\DBAL\Driver\PDOMySql\Driver’ not found

Opciones a cambiar las migraciones


Ahora bien, los posibles cambios que les podemos hacer a la tabla profiles puede
ser:

Renombrar la tabla

1 Schema::rename(‘profiles’, 'nombre_nuevo');

Eliminar la tabla

1 Schema::drop(‘profiles’);

Agregar nuevos campos o columnas

1 Schema::table(‘profiles’, function ($table) {


2    $table->string(‘address');

3 });

Si estamos usando MySQL podemos agregar la columna después de una en


específico, es decir:

1 Schema::table('profiles', function ($table) {


2    $table->string(‘address')->after(‘phone’);

3 });

https://styde.net/modificando-migraciones-en-laravel/ 4/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

Cambiar el ¡Regresó
tipo o ellos
Planatributos deporuna
Mensual! Únete solocolumna
12 USD

1 Schema::table('profiles', function ($table) {

2    $table->string('comments', 100)->change();

3 });

Renombrar a una columna

1 Schema::table('profiles', function ($table) {

2    $table->renameColumn('nombre_anterior', 'nombre_nuevo')

3 });

Eliminar una columna

1 Schema::table('profiles', function ($table) {

2    $table->dropColumn(‘phone’);
3 });

Agregar una llave foranea

1 Schema::table('posts', function ($table) {


2    $table->integer('user_id')->unsigned();

3    $table->foreign('user_id')->references('id')->on('users

4 });

Eliminar una llave foranea

1 $table->dropForeign('posts_user_id_foreign');

En este caso se concatena el nombre de la tabla a modificar, más el nombre de la


columna y por último la cadena “_foreign”

Ejemplo de uso
Para nuestro caso vamos a hacer algunos cambios en nuestra tabla profiles:
renombrar la columna contact a contact_person, agregar la columna website y
address y eliminar la columna comments, creando en un solo archivo de
migración:

https://styde.net/modificando-migraciones-en-laravel/ 5/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

¡Regresó
1 php artisan el Plan Mensual!
make:migration Únete por solo 12 USD --table=pr
alter_profiles_table

Este comando crea un nuevo archivo que contiene los métodos up y down vacíos
para nosotros agregar los cambios a realizar. Nuestro método up quedaría así:

1 public function up()


2     {

3         Schema::table('profiles', function (Blueprint $tab

4             $table->renameColumn('contact', 'contact_perso
5             $table->string('address')->after('phone');

6             $table->string('website', 100)->after('address

7             $table->dropColumn('comments');
8         });

9     }

y el método down debería revertir las operaciones realizadas con el método up;
esto para cuando se haga migrate:rollback se puedan deshacer dichas
operaciones, por tanto nuestro método down queda de esta manera:

1 public function down()

2     {

3         Schema::table('profiles', function (Blueprint $tab


4             $table->renameColumn('contact_person', 'contac
5             $table->dropColumn('address');

6             $table->dropColumn('website');
7             $table->string('comments')->nullable()->after(
8         });

9     }

Al ejecutar por consola:

1 php artisan migrate

Como resultado tendríamos lo siguiente:

https://styde.net/modificando-migraciones-en-laravel/ 6/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

¡Regresó el Plan Mensual! Únete por solo 12 USD

Esto es todo, espero que sea de mucha ayuda. No olviden dejar sus comentarios y
dudas; además de compartir en las redes sociales.

Material relacionado
Migraciones, seeders y model factories
Creando Migraciones en Laravel 5
Migraciones en Laravel

Aprende desarrollo web con Laravel, Vue.js y mucho más a partir de 12 USD al
mes: ver planes.

Publicado por: Clemir Rondón

 Migraciones

 Lección anterior
Uso de caché en Laravel 5.1

Lección siguiente 
Cómo crear Helpers personalizados en Laravel

https://styde.net/modificando-migraciones-en-laravel/ 7/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

¡Regresó el Plan Mensual! Únete por solo 12 USD

7 Comentarios Styde.net 
1 Acceder

 Recomendar t Tweet f Compartir Ordenar por los más nuevos

Únete a la conversación...

INICIAR SESIÓN CON


O REGISTRARSE CON DISQUS ?

Nombre

Miguel Alparez • hace 10 meses


Tengo un problema con timestamp.
La variable created_at almacena el dia y la hora, pero yo solo
quiero que muestre la hora, pues me facilita utilizarlo para
comparaciones con variables date. ¿Como hago eso?
△ ▽ • Responder • Compartir ›
https://styde.net/modificando-migraciones-en-laravel/ 8/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

¡Regresó el Plan Mensual! Únete por solo 12 USD


Clemir Rondón Styde > Miguel Alparez • hace 10 meses

Hola @Miguel Alparez tanto created_at como updated_at


son objetos Carbon https://styde.net/component... su
documentación completa es http://carbon.nesbot.com/docs/
△ ▽ • Responder • Compartir ›

Jose Alvarado • hace 2 años


Muy buen artículo, es de gran ayuda.
△ ▽ • Responder • Compartir ›

Eduardo Salas • hace 3 años


Un caso comun cuando se modifica un modelo es tener que
agregar campos requeridos, pero si no se cuida el como se llenan
falla la BD al correr la migracion.
Con SQL usualmente crearias el campo nullable, ejecutas un
update para llenarlo, y otro alter para hacerlo not null.
Cual es la estrategia con este esquema?
△ ▽ • Responder • Compartir ›

Enrrique Mejias • hace 3 años


gracias me ha servido de mucho
△ ▽ • Responder • Compartir ›

Pedro David Velásquez Tirado • hace 3 años


hola buenas tardes,Dios les bendiga tengo ua consulta que
hacerte amigo me gustan las migraciones que se pueden realizar
en laravel, pero el sistema de migraciones que utiliza laravel
permite crear de forma automatica todo el modelo de base de
datos? de una base de datos existente sea de postgres o mysql?
nose si me estoy explicando.... gracias de ante mano.
△ ▽ • Responder • Compartir ›

Enrrique Mejias > Pedro David Velásquez Tirado


• hace 3 años
de hecho tienes que tener la base de datos creada, en da
dato caso si la tienes ya con datos, no tendrias que generar
las migraciones a menos que solo sean de cambios de
fondo como en este tutorial
△ ▽ • Responder • Compartir ›

TAMBIÉN EN STYDE.NET

Podcast 11: Depende de ti Detrás de cámaras del Curso de


13 comentarios • hace 5 meses Patrones de Diseño
Carlos Narvaez — yo pase de 1 comentario • hace un mes

https://styde.net/modificando-migraciones-en-laravel/ 9/10
27/3/2019 Modificando migraciones en Laravel – Styde.net

¡Regresó el Plan Mensual! Únete por solo 12 USD

Suscríbete a nuestro
boletín
Te enviaremos publicaciones con
consejos útiles y múltiples recursos
para que sigas aprendiendo.

Tu correo electrónico

SUSCRÍBETE

     

En Styde nos dedicamos a enseñarte tecnologías actuales de desarrollo web para ayudarte
a crear tus proyectos de una forma más eficiente.

Ver Planes • Series y cursos • Ver últimas lecciones


Contacto • Términos de uso • Privacidad

© 2019 Derechos Reservados - Styde Limited

https://styde.net/modificando-migraciones-en-laravel/ 10/10

Vous aimerez peut-être aussi