No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Curso de PHP con Laravel

Curso de PHP con Laravel

H茅ctor Benitez

H茅ctor Benitez

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?

o inicia sesi贸n.

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 鈥榩hp artisan鈥, podemos ver que existe un comando llamado 鈥榤ake:migration鈥, asi como tambi茅n un comando llamado 鈥榤igrate鈥, 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: 鈥淪e va un paso hacia atras鈥, es decir hacia la ultima migracion hecha antes.
    Las migraciones se encuentra en el fichero 鈥渄atabase/migrations鈥, la cual ya contiene 2 migraciones de ejemplo
    Dentro de los ficheros de ejemplo, se encuentra el metodo 鈥渦p鈥 y el metodo 鈥渄own鈥, los cuales realizan y revierten las migraciones, respectivamente.
    Al ejecutar el comando 鈥榩hp artisan migrate鈥, automaticamente se ejecutaran todas las migraciones que tengan pendientes en los archivos dentro de la carpeta de migraciones.
    En la tabla 鈥榤igrations鈥 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 鈥榤igrations鈥, 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 鈥渆mojis鈥 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:馃槮鈥渃ould find driver鈥)
C:\xampp\htdocs\curso-laravel\vendor\laravel\framework\src\Illuminate\Database\connectors.php:70

PDO::__construct(鈥減gsql:host=127.0.0.1; dbname=cursolaravel;port=5432;sslmode=prefer鈥, 鈥減ostgres鈥, 鈥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 鈥榣aravel鈥 (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 鈥楤ASE 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 鈥減hp 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 = 鈥楤ASE TABLE鈥)

鈥擫o 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 = 鈥楤ASE TABLE鈥)**

鈥 quite los cambios que le hize a esta linea de codigo dejandola como antes asi: 鈥榰nix_socket鈥 => env(鈥楧B_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 = 鈥楤ASE 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 = 鈥楤ASE 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鈥檒l 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鈥檚 errors.
664| catch (Exception $e) {

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

Exception trace:

1 PDOException:馃槮鈥渃ould not find driver鈥)
/opt/lampp/htdocs/curso_laravel/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

2 PDO::__construct(鈥渕ysql:host=127.0.0.1;port=3306;dbname=laravel鈥, 鈥渞oot鈥, 鈥溾, [])
/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:馃槮鈥淧ackets 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(鈥渕ysql:host=192.168.1.46;port=3306;dbname=cursolaravel鈥, 鈥渞oot鈥, 鈥溾, [])**

La soluci贸n es la IP por defecto del host del archivo 鈥渄atabase.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 = 鈥楤ASE 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 鈥淭ABLA鈥, 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'); } }); } }
>