No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Cómo funcionan las Migraciones de DB

8/25
Recursos

Laravel ofrece un sistema de migraciones de bases de datos las cuales pueden ser vistas como una especie de control de código pero para bases de datos. Esto es muy útil para equipos de trabajo al poder tener los cambios en el repositorio y de esta manera cada miembro del equipo podrá ejecutar las migraciones para tener los esquemas adecuados.

  • Tenemos un comando llamado make:migration que nos permite generar archivos de migraciones.
  • Contamos con una sección entera llamada migrate que nos servirá para realizar diferentes acciones relacionadas con las migraciones. Si ejecutamos migrate sin nada más, ejecutará todas las migraciones pendientes en el equipo.
  • migrate:fresh va a borrar todas las tablas y las creará de nuevo utilizando todas las migraciones que tenemos.
  • migrate:rollback nos permite regresar un paso.

Puedes encontrar las migraciones en la carpeta database/migrations. Laravel nos ofrece dos migraciones de inicio que son para crear tablas de usuarios y para crear una tabla de resets de passwords.
Las migraciones tienen dos partes:

  • up, que nos dice qué va a crear la migración.
  • down, que revierte lo que se hizo en la migración, activado al hacer rollback.

Al correr las migraciones se nos crearán 3 tablas, una de ella siendo migrations que nos llevará el control de cómo se va generando cada cambio.

Laravel nos ofrece Schema que nos trae diferentes cosas para trabajar sobre los sistemas de bases de datos.

Aportes 59

Preguntas 17

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Si tienen versiones anteriores de MySQL v5.7.7 y les sale este error:

En este link muestran como solucionarlo:
https://www.youtube.com/watch?v=aBbIkVPwo-Y

Para los que les sale el error con las migraciones, hagan esto y ya

Si alguien tiene el problema con migrar su base de datos, de como da el docente su ejemplo, solo lo tienes que modificar el tamaño en el email como en el ejemplo.
Modificar

La primera

segunda

y luego en cmd

realizar los comando de:

php artisan migrate

luego php artisan migrate --seed

Las Migraciones en Laravel son una herramienta que nos permite crear una especie de sistema de control de versiones de bases de datos donde podemos definir tablas con POO en vez de SQL, es compatible con los diferentes motores de base de datos dado que Laravel genera el SQL por nosotros, adaptado al tipo de base de datos con la que estemos trabajando.

Link actualizado con la información de Migraciones en Laravel.
https://laravel.com/docs/7.x/migrations

Si alguien desea usar laravel con docker les dejo mi repositorio Laravel_docker

Probelma frecuente:
Si por alguna razón tienes un error como:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

La solución esta en la Documentación oficial de laravel y basta editar el archivo AppServiceProvider.php en la ruta [ app/Providers ]

Si tienen versiones anteriores a MySQL v5.7.7 o Maria DB y les aparece el siguiente error:

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

Acá está la solución: https://laravel-news.com/laravel-5-4-key-too-long-error

Apuntes:
Laravel ofrece una herramienta para migraciones en bases de datos, que actúan como archivos en PHP y al momento de haber cambios en las bases de datos (inserciones, ediciones o eliminaciones), este archivo se actualizara para luego ser enviado por medio del VCS a alguna plataforma de desarrollo colaborativo como GitHub.
A través de la ayuda que nos presta el comando ‘php artisan’, podemos ver que existe un comando llamado ‘make:migration’, asi como también un comando llamado ‘migrate’, el cual contiene otros subcomandos que nos van a ayudar con el tema de las migraciones.

  • migrate: Este comando (sin nada mas agregado), va a llevar a cabo todas las migraciones que esten pendientes en el equipo.
  • migrate:fresh: Se borran todas las tablas y se agregan de nuevo con todas las migraciones que tenemos actualmente.
  • migrate:rollback: “Se va un paso hacia atras”, es decir hacia la ultima migracion hecha antes.
    Las migraciones se encuentra en el fichero “database/migrations”, la cual ya contiene 2 migraciones de ejemplo
    Dentro de los ficheros de ejemplo, se encuentra el metodo “up” y el metodo “down”, los cuales realizan y revierten las migraciones, respectivamente.
    Al ejecutar el comando ‘php artisan migrate’, automaticamente se ejecutaran todas las migraciones que tengan pendientes en los archivos dentro de la carpeta de migraciones.
    En la tabla ‘migrations’ en la base de datos, se va a hacer gestion de cada cambio que haya en la carpeta de migraciones, al momento de crear otro archivo de migración, este no aparecera automaticamente en la tabla ‘migrations’, solo aparecera una vez ejecutemos el comando de migrate.
    Al momento de subir el archivo al repositorio y que otro contributor lo traiga a su repositorio local, la persona ya puede hacer el migrate correspondiente.

Facil solucion al error presentado.

Fachada o Facade
Las Facades (o Fachadas) son un patrón de diseño de la Programación Orientada a Objetos que nos permite ocultar un subsistema detrás de un objeto.

Solución para corregir el error

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

[https://es.stackoverflow.com/questions/159624/error-sqlstate42000]

Para el error:

access-denied-for-user-homesteadlocalhost-using-password-yes

Pueden entrar aqui: https://stackoverflow.com/questions/29756194/access-denied-for-user-homesteadlocalhost-using-password-yes

Para el error del Scecified key was too long: https://laravel-news.com/laravel-5-4-key-too-long-error

Quedo atento.

En la documentación dan la solución a este error.

[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique(email))

Index Lengths & MySQL / MariaDB
Laravel uses the utf8mb4 character set by default, which includes support for storing “emojis” in the database. If you are running a version of MySQL older than the 5.7.7 release or MariaDB older than the 10.2.2 release, you may need to manually configure the default string length generated by migrations in order for MySQL to create indexes for them. You may configure this by calling the Schema::defaultStringLength method within your AppServiceProvider:

use Illuminate\Support\Facades\Schema;

/**

  • Bootstrap any application services.
  • @return void
    */
    public function boot()
    {
    Schema::defaultStringLength(191);
    }

en el video acontinuacion le dan solucion
https://youtu.be/kVqRUCnVkH8?list=PLIddmSRJEJ0sxS-RmqdRMlkyWOQWvEGEt

tengo el siguiente error al hacer el migrate
PDOException:😦“could find driver”)
C:\xampp\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\connectors.php:70

PDO::__construct(“pgsql:host=127.0.0.1; dbname=cursolaravel;port=5432;sslmode=prefer”, “postgres”, “123456”, [])
C:\xampp\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\connectors.php:70

gracias por su ayuda

A mi me aparece este error

php artisan migrate

Imagino que lo que hace Laravel con esa tabla de migraciones, es consultar si los archivos que estan en el directorio existen ya en esa tabla. Si no estan, crea las tablas y luego inserta el nombre de la migracion en la tabla migrations.

Alguien sabe realmente como es el proceso?

😃

Estoy siguiendo el curso con la base de datos postgresql y con el SO windows 10, al momento de realizar la migración me salía el siguiente error:

 Illuminate\Database\QueryException  : could not find driver (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE')

Lo único que tuve que hacer adicional fue en el archivo php.ini habilitar el driver extension=pgsql y extension=pdo_pgsql . Con habilitarlos me refiero únicamente a quitarles el ; inicial.

Si alguien esta usando docker, postgres y laravel y tiene el problema php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [1049] Unknown database ‘laravel’ (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = ‘BASE TABLE’)
debe agregar RUN docker-php-ext-install pgsql pdo pdo_pgsql al dockerfile

Estoy trabajando con Mamp en windows; y tuve 2 error messages cuando corria el comando “php artisan migrate”:

1) Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = bud
getProject and table_name = migrations and table_type = ‘BASE TABLE’)

—Lo resolvi cambiando la linea de codigo del file de mamp php.ini “;extension=pdo_mysql por extension=pdo_mysql.”

luego tuve este error:

  1. ** Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.
    (SQL: select * from information_schema.tables where table_schema = budgetproject and table_name = migrations and table_type = ‘BASE TABLE’)**

— quite los cambios que le hize a esta linea de codigo dejandola como antes asi: ‘unix_socket’ => env(‘DB_SOCKET’, ‘’) en config->database.php y ademas corri este comando:
php artisan config:cache

para luego correr el comando que el profesor dice php artisan migrate y funciono!

Pregunta: ¿Esto funciona para crear una DB pero existe algun problema si borro los archivos create_user_table y create_password_reset_table y utiliizo un db que ya alla creado?

no me funciona el laravel para los proyectos 127.0.0.1:8000 no funciona

Compañeros si alguno le genera este error al utilizar php artisan migrate


   Illuminate\Database\QueryException 

  could not find driver (SQL: select * from information_schema.tables where table_schema = cursolaravel and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671
    667|         // If an exception occurs when attempting to run a query, we'll format the error
    668|         // message to include the bindings with SQL, which will make this exception a
    669|         // lot more helpful to the developer instead of just the database's errors.
    670|         catch (Exception $e) {
  > 671|             throw new QueryException(
    672|                 $query, $this->prepareBindings($bindings), $e
    673|             );
    674|         }
    675| 

      +34 vendor frames 
  35  artisan:37
      Illuminate\Foundation\Console\Kernel::handle()```
ejecuten esta linea:


sudo apt install php-mysql

Esto funciono despues de muchos intentos y explorar foros encontre esa solucion :) de igual modo dejo en enlace [](https://stackoverflow.com/questions/50427208/could-not-find-driver-error-when-using-php-artisan-migrate)

Las migraciones nos ayudan a crear tablas, borrarlas o devolverlas a un estado original, son especialmente buenas en el caso de tener equipos de trabajo los cuales generen cambios constantes a las tablas. ( php artisan migrate [ Ejecuta todas las migraciones ] [ Para saber que tipo de migracion vamos a realizar ejecuta el comando ~ php artisan ~ y revisa la seccion ~ MIGRATIONS ~ ]).

Si trabajan con PostgreSQL, la configuración en el archivo .env es la siguiente:

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=dblaravel_course
DB_USERNAME=postgres
DB_PASSWORD=password
 

Y no olviden modificar el archivo config/database.php donde deben indicar cual es la configuración por defecto de la base de datos, en este caso sería:

    'default' => env('DB_CONNECTION', 'pgsql'),

Si en algún momento tienen error que dice:

could not find driver (SQL: select * from information_schema.tables where table_schema = curso_laravel_5 and table_name = migrations and table_type = ‘BASE TABLE’)

Esto al moemtno de ejecutar php artisan migrate.

Para solucionar esto hay que instalar el paquete de php-mysql, esto me paso en Debian Linux, solo basta con ejecutar en terminal:

apt-get install php-mysql

Cuando instale correctamente, reiniciar servicios y volver a ejecutar php artisan migrate y ya genera las tablas.

Lo intenté en el equipo de mi trabajo y no funcionó pero en mi equipo personal sí pude.

Gerardo@FAMILIA-PC MINGW64 /d/Development/laragon/www/curso-laravel (master)
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

Me gusta mucho esto de las migraciones a mi me pasa que me pasan todo el .sql y tengo que hacer todo pero esto es hermoso la verdad si esta muy bonito de las migraciones ♥

Jajajja el editor de vídeo no hizo todo el trabajo, le faltaron las imágenes al final…

Consulta, porque al generar el comando migrate, se llega a crear las tablas normalmente pero me aparece el siguiente error:

 Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specif
ied key was too long; max key length is 1000 bytes (SQL: alter table `users` add unique `users_email_un
ique`(`email`))

  at D:\Dev\wamp64\www\lab\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.ph
p:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too lon
g; max key length is 1000 bytes")
      D:\Dev\wamp64\www\lab\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.p
hp:458

  2   PDOStatement::execute()
      D:\Dev\wamp64\www\lab\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\Connection.p
hp:458

Saludos, gracias de antemano

estoy borran dolo para re-alisarlo de nuevo

me ocurrio un error pero ya veo que es comun para los usuarios de xampp, gracias compañeros de estudio por la solucion

laravel me dice nothing rollback y no puedo hacer la el artisan migrate por que dice que ya existe que puedo hacer?

Qué diferencia hay entre usar el DB_USER y DB_PASS Así:
DB_USERNAME=homestead
DB_PASSWORD=secret

Y Así:
DB_USERNAME=root
DB_PASSWORD=’’

Lo pregunto porque me salía acceso denegado al ejecutar el comando migrate. y coloqué el usuario root y sin pass y se me creó.

¿Hay alguna forma de hacerlo nuevamente con el homestead y secret o así puedo seguir el curso sin problema?

Hola como puedo asignar el tamaño de cada uno de mis campos en las columnas creadas, ya que no quiero usar el total de los 255 que permite un varchar, quizá lo quiero de unos 60 solamente… podrían ayudarme con esa parte.

Hola. Quisiera saber si es posible trabajar con el Eloquent teniendo una base de datos ya creada y funcionado con muchos registros. La base ya tiene las relaciones creadas en el motor de bases de datos. La pregunta es: ¿Hay manera de evitar ejecutar las migraciones para trabajar con las relaciones de la propia base de datos?. El inconveniente es que no puedo modificar de ninguna manera la estructura de esa base de datos.

puedo en lazar el usuario que crea laravel con una tabla de vendedores que tengo creada en la base de datos?

Creo que las migraciones es lo más dificil de manejas de laravel , las demas caracteristicas yo creo que son ya mas faciles de manejar y administrar

Excelente las migraciones

++ TENGO EL SIGUIENTE ERROR ++

php artisan migrate
Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = ‘BASE TABLE’)

at /opt/lampp/htdocs/curso_laravel/vendor/laravel/framework/src/Illuminate/Database/Connection.php:665
661| // If an exception occurs when attempting to run a query, we’ll format the error
662| // message to include the bindings with SQL, which will make this exception a
663| // lot more helpful to the developer instead of just the database’s errors.
664| catch (Exception $e) {

665| throw new QueryException(
666| $query, $this->prepareBindings($bindings), $e
667| );
668| }
669|

Exception trace:

1 PDOException:😦“could not find driver”)
/opt/lampp/htdocs/curso_laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

2 PDO::__construct(“mysql:host=127.0.0.1;port=3306;dbname=laravel”, “root”, “”, [])
/opt/lampp/htdocs/curso_laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

Please use the argument -v to see more details.

en esta parte laravel nos ofrece un sistema de migración para la bd donde crea varias tablas con descripciones especificas con posibilidad de revertir todo .

bueno me gustaria saber como resolver al final elimine las tablas de mi base de datos y lo pude lograr pero no usando comando sino directamente en el phpmyadmin, si pudieran ayudarme para saber cual fue mi error

Hola compañeros yo tenia el siguiente error:

 1   PDOException::("SQLSTATE[HY000] [1130] Host 'ElNombreDeMiCompu' is not allowed to connect to this MySQL server")
      C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

  2   PDO::__construct("mysql:host=192.***.***.***;port=95**;dbname=laravel", "usuario", "password", [])
      C:\xampp\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70

  Please use the argument -v to see more details.

em mi base de datos mysql workbench lo solucione de esta manera:

USE cursolaravel;

CREATE USER 'root'@'AquiPuseElNombreDeMiCompu' IDENTIFIED BY 'PonTuContraseniaDeMysql';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'AquiPuseElNombreDeMiCompu' WITH GRANT OPTION;
FLUSH PRIVILEGES;

después en la consola ya corri lo que nos enseño el profesor para hacer la migración:

php artisan migrate

ya después todo funciono y pude ver las tablas reflejadas en mi BD.

Para los que tienen los sgtes. errores:
**
C:\xampp\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
PDOException:😦“Packets out of order. Expected 0 received 1. Packet size=65”)

C:\xampp\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
PDO::__construct(“mysql:host=192.168.1.46;port=3306;dbname=cursolaravel”, “root”, “”, [])**

La solución es la IP por defecto del host del archivo “database.php”, que esta dentro de la carpeta config de nuestro proyecto; cambiarla por la IP de nuestra PC y listo, espero les sirva compañeros.

    'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '192.168.1.46'),   // *CAMBIAR POR LA IP DE SU EQUIPO

Dentro de mi carpeta de migraciones no tengo la migración Password reset, en su lugar tengo la failed jobs.

No tendré problemas después cuando quiera implementar la función de password reset?.

En Ubuntu 18.4 a ejecutar el comando:

php artisan migrate

Obtenía este error:

SQLSTATE[HY000] [2006] MySQL server has gone away (SQL: select * from information_schema.tables where table_schema = moogo-laravel and table_name = migrations and table_type = ‘BASE TABLE’)

Solución:

Deja el valor por defecto en archivi .env en el siguiente parámetro:

DB_HOST=127.0.0.1

estoy trabajando el curso en Visual STUDIO code Y ME HA parecido una genialidad, me ahorre esa abridera de consola y estar deteniendo la misma para tirar un comando de artisan, le dan click derecho al directorio del proyecto en la lista de carpetas de VSC y ledicen abrir desde terminal esta se posiciona abajo
pero luego pueden desde el icono que esta al lado izquierdo de eliminar consol que quieren dividir la consola y se les creara otra consola ya lista en la raiz del proyecto sin cerrar la ejecucion de php artisan serve de la otra

Como puedo obtener esta etiqueta column: en visual studio code

al correr el comando de artisan migrate me sale esto, estoy usando postgres

Cual era el comando de consola que creaba una migración y modelo con el mismo comando?

la lista de propuedades que le pueden poner a cada registro de la migracion “TABLA”, la pueden encontrar aqui:
https://laravel.com/docs/7.x/migrations#creating-columns

es muy intuitivo y no tiene pierde porque mientras las leen se dan cuenta facilmente de que son el par de propiedades de SQL normalito solo que deben escribirse aqui como objetos

Si les aparece el siguiente error:

   Illuminate\Database\QueryException

  could not find driver (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

tienen que ir al archivo php.ini y quitar el punto y coma a la siguiente linea y luego reiniciar el servidor WEB.

extension=pdo_mysql

Me sale este error, me pueden ayudar por favor.

Eloquent me parece genial incluso sin usarlo con Laravel 😄

Literalmente el sistema de migraciones de Laravel es un control de versiones de la base de datos, es esta la que nos va a ir manteniendo que cosas agregamos a nuestra base de datos, etc. Y esta se va guardando por lotes, por eso la tabla de migrations dentro de la base de datos es importante, porque es con ella con la que Laravel sabe en qué lote estás:D

hay validaciones que podemos hacer en as migraciones como esta

<?php
public function up() { //Validamos si existe la tabla if (Schema::hasTable('users')){ Schema::table('users', function (Blueprint $table) { //valido si existe la columna en la tabla if (!Schema::hasColumn('users', 'activo')){ $table->tinyInteger('activo')->after('updated_at')->comment('Si está activo=1, Inactivo=2'); } }); } }
>