Crea un proyecto Laravel y configura una base de datos MySQL

4/17

Lectura

Instalaci贸n y creaci贸n de proyectos con Laravel o Composer 鉃

Para crear un proyecto de Laravel primero debemos instalarlo, para esto se pueden tomar dos caminos: el instalador de Laravel y Composer.

...

Reg铆strate o inicia sesi贸n para leer el resto del contenido.

Aportes 54

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Hola, vengo del curso de Curso de Introducci贸n a Laravel y en el exponen como buenas practicas la implementacion de migrations, factories y models para crear la BD directamente desde laravel, porque ac谩 se realiza manualmente?

Me gusta el proyecto pero estaria m谩s interesante si us谩ramos **migrates ** de laravel 鈾

驴Por qu茅 no utilizar las migraciones y mostrar m谩s bondades de este framework?

Hola! desp煤es de unos d铆as pude realizar este ejercicio, pero en vez de crear las tablas con sql las hice a partir de las migraciones. les dejo mi aporte de lo que aprend铆:
Basicamente cuando hac铆a con c贸digo sql estaba todo bien. Pero en el reto de la clase siguiente tenias que ejecutar php artisan migrate. Qu茅 pasaba? bueno laravel por defecto trae la tabla users (y dos m谩s), cuando ejecutas php artisan migrate me daba el error de la tabla users ya existe. Claro ac谩 ya la hab铆amos realizado con sql. As铆 que hay dos opciones: eliminar todos los archivos de la carpeta migrations, o escribir (que ser铆a la manera correcta) las tablas creando los archivos con php artisan make:migrations name_archivo.

Yo hice de la segunda manera, les comparto como quedaron:

2021_01_19_180143_create_projects_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProjectsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('projects', function (Blueprint $table) {
            $table->id('project_id');
            $table->unsignedBigInteger('city_id');
            $table->unsignedBigInteger('company_id');
            $table->unsignedBigInteger('user_id');
            $table->string('name');
            $table->date('execution_date')->nulleable();
            $table->tinyInteger('is_active')->nulleable();

            $table->timestamps();
            

            //llaves foraneas
            $table->foreign('city_id')->references('city_id')->on('cities');
            $table->foreign('company_id')->references('company_id')->on('companies');
            $table->foreign('user_id')->references('user_id')->on('users');

        });
    }

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

2021_01_19_172042_create_cities_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCitiesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cities', function (Blueprint $table) {
            $table->id('city_id');
            $table->string('name');

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

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

2021_01_19_171850_create_companies_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCompaniesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('companies', function (Blueprint $table) {
            $table->id('company_id');
            $table->string('name');

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

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

Espero les sirva el aporte! saludos.

Hola otra vez no me pod铆a quedar con la duda asi que cree las migraciones de la base de datos jejjej
les dejo la rama en github por si quieren crear un fork o algo asi

https://github.com/MiguelAngelMP/Curso-de-Manejo-de-Datos-en-Laravel-con-Eloquen/tree/featureMigratesDB

y ejecutar
no olviden configurar la variables en el archivo .env

php artisan migrate --path=database/migrations/project_manager/

Lo hice todo con migraciones, factories y un seeder.

Esto se ve en el curso de introducci贸n a Laravel de @italo

En mi caso prefiero PostgreSQL el DML queda asi:

CREATE TABLE projects (
project_id serial,
city_id INT NULL,
company_id INT NULL,
user_id INT NULL,
name VARCHAR(30) NULL,
execution_date DATE NULL,
is_active INT NULL,
created_at DATE NULL,
updated_at DATE NULL,
PRIMARY KEY (project_id));

CREATE TABLE users (
user_id serial,
name VARCHAR(20) NULL,
created_at DATE,
updated_at DATE,
PRIMARY KEY (user_id));

CREATE TABLE companies (
company_id serial,
name VARCHAR(20) NULL,
created_at DATE,
updated_at DATE,
PRIMARY KEY (company_id));

CREATE TABLE cities (
city_id serial,
name VARCHAR(20) NULL,
created_at DATE,
updated_at DATE,
PRIMARY KEY (city_id));

ALTER TABLE projects ADD CONSTRAINT fk_city_id FOREIGN KEY (city_id) REFERENCES cities(city_id);

ALTER TABLE projects ADD CONSTRAINT fk_company_id FOREIGN KEY (company_id) REFERENCES companies(company_id);

ALTER TABLE projects ADD CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id);

Y en el archivo .env solo es necesario cambiar esta linea DB_CONNECTION=mysql por esta DB_CONNECTION=pgsql

Todo listo, base de datos conectada.

Excelente, hubiese preferido que esta clase fuera en video, se hubiese aprovechado a explicar el tema de migraciones de Laravel que es un sistema mucho mejor para poder crear la base de datos y dem谩s, pero con esto est谩 perfecto.

Y Tinker es una maravilla 鉂わ笍 Puedes ejecutar PHP ah铆 para hacer pruebas y dem谩s:3

Si usas MacOs e instalaste XAMPP como yo, para utilizar la consola de MySQL o MariaDB tuve que moverme al directorio /Applications/XAMPP/bin y ah铆 ejecutar ./mysql -u <usuario> -p

O directamente, con mi usuario root:

/Applications/XAMPP/bin/./mysql -u root -p

proporcionas la contrase帽a que definiste para tu usuario al instalar XAMPP o MySQL y una vez dentro, con show databases

MariaDB [(none)]> show databases

ver谩s una lista de las bases de datos y podras empezar a crear tu nueva base de datos

Es la primera vez que veo en alg煤n tema relacionado con Laravel y BD que no se crean las tablas a partir de migraciones. Me gusta porque vamos a poder ver como conectarnos y trabajar con una BD ya creada

para instalar composer deben ir a https://getcomposer.org/download/

tuve que agregar laravel a las variables de entorno para poder crear el proyecto

Segu铆 el paso a paso y me funciono al primer intento. Estoy usando Windows 10.

Lo hice completamente con migraciones y la verdad es que siento que es mucho m谩s r谩pido. Cuando tienes errores por ejemplo en una llave for谩nea te da la indicaci贸n del error.
Les comparto mis migraciones
.
Crear migraci贸n:

php artisan make:migration create_tableName_table

Es importante primero crear la migraci贸n de users, cities y companies para que al hacer las llaves for谩neas en la tabla projects, estas se hagan de forma correctamente con las tablas mencionadas ya creadas previamente.
.
Y las migraciones quedaron as铆:
.
2022_08_27_191242_create_cities_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCitiesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('cities', function (Blueprint $table) {
            $table->bigIncrements('city_id');
            $table->string('name', 50);
            $table->timestamps();
        });
    }

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

.
2022_08_27_191340_create_companies_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateCompaniesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('companies', function (Blueprint $table) {
            $table->bigIncrements('company_id');
            $table->string('name', 50);
            $table->timestamps();
        });
    }

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

.
2022_08_27_191503_create_users_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('user_id');
            $table->string('name');
            $table->timestamps();
        });
    }

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

.
2022_08_27_191645_create_projects_table

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProjectsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('projects', function (Blueprint $table) {
            $table->bigIncrements('project_id');
            $table->integer('budget');
            $table->string('name');
            $table->date('execution_date');
            $table->boolean('is_active');

            $table->bigInteger('city_id')->unsigned()->nullable();
            $table->bigInteger('company_id')->unsigned()->nullable();
            $table->bigInteger('user_id')->unsigned()->nullable();
            
            $table->foreign('city_id')->references('city_id')->on('cities')->onDelete('set null');
            $table->foreign('company_id')->references('company_id')->on('companies')->onDelete('set null');
            $table->foreign('user_id')->references('user_id')->on('users')->onDelete('set null');

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

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

.

Lo siguiente que hice fue crear mi BD y en el archivo .env colocar el nombre de dicha BD

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_manager
DB_USERNAME=root
DB_PASSWORD=

.
Finalmente solo fue cuestion de ejecutar las migraciones

php artisan migrate

MySQL Workbench actualmente sigue siendo gratuito?

Lo m谩s com煤n en el desarrollo de proyectos es que la base de datos la vas administrar por separado, es decir no desde Laravel creo que el ejemplo aplica excelentemente, muchas de las empresas se cuidan en esta parte, es decir, que al programador no le corresponde gestionar la BD desde el framework, tienen su ingeniero experto en este tema.

Si te aparece un mensaje de error

Psy Shell v0.10.4 (PHP 7.3.11 鈥 cli) by Justin Hileman
>>> DB::connection()->getPdo();

PDOException with message 'SQLSTATE[HY000] [2002] Connection refused'

al intentar ejecutar tinker y ya revisaste que tu archivo .env es correcto y con los mismos datos te puedes conectar via consola, intenta ejecutar lo siguiente en consola de MySQL (o MariaDB):

MariaDB [(none)]> show variables like '%sock%';

Te saldr谩 algo as铆:


Variable_name Value
performance_schema_max_socket_classes 10
performance_schema_max_socket_instances -1
socket /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

Copia el 煤ltimo valor y lo vas a agregar a tu archivo .env con la variable DB_SOCKET as铆:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_manager
DB_USERNAME=user
DB_PASSWORD=pwd
DB_SOCKET='/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock'

Y listo! podr谩s ejecutar tinker sin error

php artisan tinker

Psy Shell v0.10.4 (PHP 7.3.11 鈥 cli) by Justin Hileman
>>> DB::connection()->getPdo();
=> PDO {#3270
     inTransaction: false,
     attributes: {
       CASE: NATURAL,

Despu茅s de varios intentos lo logr茅, realice el proceso haciendo migraciones con artisan, para ello hay que tener mucho en cuenta lo que se llama: integridad referencial en laravel con las claves for谩neas, les dejo el link que me sirvi贸 mucho: https://styde.net/claves-foraneas-e-integridad-referencial-de-datos-en-laravel/

perfecto!!!

Listo 馃槂

![](

Los que quieran probrar tinker en la web, pueden darle un vistazo a https://tinkerwell.app/

Creaci贸n de tablas usando migraciones

  1. Despu茅s de crear y probar la conexi贸n con la base de datos podemos empezar a crear las tablas usando migraciones. Abriendo la consola y ejecutando el comando php artisan migrate.
  1. Con eso se crearan tres tablas users, migrations y failed_jobs.
    3.En el proyecto nos dirigimos a ** database/migration** y podremos ver las migraciones que se ejecutaron previamente.

** Nota: Las migraciones no son m谩s que clases de php que heredan de otra clases propia del framework
llamada migration.**
Comando de migraciones:

  • . php artisan migrate:refresh: Se utiliza para modificar un campo existente en una migraci贸n y evitar el incremento exponencial de migraciones por cambios sencillos. El comando refresh funciona de la siguinete forma, ejecuta primero un reset de todas las migraciones y las reconstruirlas actualizando el dato.

  • . php artisan migrate:reset: Hace un retroceso de las migraciones ejecutadas previamente, eliminando las tablas creadas, una vez ejecutado este comando usamos php artisan migrate para reconstruir tablas.

  • .php artisan migrate:rollback: Regresa el ultimo lote de migraciones ejecutados.

  • .php artisan make:migration: Crea una nueva migraci贸n y actualiza la bd.

  • .php artisan migrate: Vuelve a construir las tablas.

  1. Abre la migraci贸n de create_user_table.php y deja los datos necesarios como lo pide el ejemplo.

5.Aplicamos el comando php artisan make:refresh para actualizar la migraci贸n. (Puedes crear tu propia migraci贸n si as铆 lo desea, en mi caso lo hice actualizando para fines practicos)

  1. Resultado

Pasos para crear tablas de companies y cities
Nota: Es bueno que el nombre de nuestra migraci贸n hara referencia a lo que vamos a hacer.
Nota: formato para crear tablas desde una migraci贸n y te genere la estructura b谩sica de los campos que necesita una tabla respetando el formato de Laravel.

  1. Crea una nueva migraci贸n desde consola
  1. Creamos nuestro esquema de tabla que vamos a utilizar.
    ** Nota: ** Si el formato de tu migraci贸n sigue el formato de create_nombretablaenpluralingles_table
    Laravel gener谩 la estructura b谩sica del schema para tu tabla.
  1. Ejecuta la migraci贸n utilizando php artisan migrate y asi poder crear en tu base de datos la nueva tabla con los campos indicados.

4.Con estos pasos podemos seguir creando nuestras tablas.

Para el caso de projects que utiliza claves foraneas es lo mismo procedimiento variando en la creaci贸n de claves foraneas como te lo muestro a continuaci贸n.

Recomendaci贸n: Sigue intentando hasta conseguir los resultado que deseas y busca el porque de cada cosas que usas. Eso me llevo a escribir este peque帽o ejemplo de mis proceso. Estos links son de mucha ayuda.Saludos y 茅xito en este curso.

Link:
Link:

No entiendo la idea de no utilizar migraciones si se supone que estamos creando un proyecto de Laravel

Si estas en entorno linux (Ubuntu)
primero debe instalar** el servidor de mysql**

sudo apt-get install mysql-server

iniciamos el servidor

sudo service mysql start

luego usamos el comando

mysql -h localhost -u root -p

Al momento de poner la contrase帽a , se coloca enter ya que no se tiene y listo.

=D

aqui ya vamos mal porque un curso que nos da las buenas practicas del ORM no se va por Eloquent como decia un comentario el curso por ahora ha sido lectura is mell

Les dejo las migraciones, por si lo quieren hacer de esta forma.

users

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

companies

Schema::create('companies', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

cities

Schema::create('cities', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

projects

Schema::create('projects', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('city_id');
            $table->unsignedBigInteger('company_id');
            $table->unsignedBigInteger('user_id');
            $table->string('name');
            $table->date('execution_date');
            $table->boolean('is_active')->default(1);
            $table->timestamps();

            $table->foreign('city_id')->references('id')->on('cities');
            $table->foreign('company_id')->references('id')->on('companies');
            $table->foreign('user_id')->references('id')->on('users');
        });

Les comparto mi repositorio, estar茅 trabajando con laravel 8 y para esta clase, use las migraciones para crear la base de datos.

https://github.com/FranciscoJCC/project_manager

Para los que dicen 鈥減orque no uso migrations鈥, al menos en mi experiencia trabajando con Laravel en proyectos mas grandes, las migraciones se hacian demasiado complejas cuando hac铆a cambios o actualizaciones. Y con el paso del tiempo decid铆 dejar de usarlo al menos en proyectos que ya estaban funcionando. Bueno es mi opini贸n 馃槉

Para los que deseen tener las migraciones podr铆an generarlas usando :

https://github.com/kitloong/laravel-migrations-generator

Existe una herramiento bastante buena que es blueprint esta gran herramienta nos ahorra un poco de tiempo a la hora de crear migraciones, modelos y controladores, espero que le guste.

Realizando las migraciones creo que seria asi:

Creamos las factories con php artisan, Los modificadores -mfc significan que crearemos los Models, Factories y Controllers

php artisan make:model Projects -mfc
php artisan make:model Companies -mfc 
php artisan make:model Cities -mfc

Luego procedemos a modificar cada una de las factories en database/migrations:

//Migraciones para usuarios

            $table->bigIncrements('user_id');
            $table->string('name')->nullable();
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();

//Migraciones para projects

            $table->unsignedBigInteger('city_id')->nullable(); //Relacion con las ciudades
            $table->unsignedBigInteger('company_id')->nullable(); // Relacion con la compa帽ia
            $table->unsignedBigInteger('user_id')->nullable(); // Relacion con el usuairo

            //Atributos
            $table->string('name', 30);
            $table->date('execution_date');
            $table->tinyInteger('is_active');
            $table->dateTime('created_at');
            $table->dateTime('updated_at');  

//Migraciones para companies

            $table->bigIncrements('company_id');
            $table->string('name', 20);

            $table->timestamps();

//cities

            $table->bigIncrements('city_id');
            $table->string('name', 30)->nullable();
            $table->timestamps();

Luego creamos la migracion para a帽adir las llaves foraneas en la tabla projects asi

php artisan make:migration add_foreign_key_projects_table --table=projects

y finalmente agregamos las llaves foraneas en la migracion:

            $table->foreign('city_id')->references('city_id')->on('cities');
            $table->foreign('company_id')->references('company_id')->on('companies');
            $table->foreign('user_id')->references('user_id')->on('users');

y por ultimo el comando

php artisan:migrate

Configuraci贸n inicial, lista!
Genial ver como se inicia el proyecto cuando la base de datos ya existe.

PROBLEMA CON LA MIGRACION
Cuando crees tus migracion, en la de projects tendras que agregar las FK. Entonces primero tendras que crear la migracion de todas las tablas y colocas en consola

php artisan migrate

pero aun te faltan las FK, entonces las creas y el error que te genera de que hay errores con las FK se debe a que intenta crear las FK antes de que existan esas tablas, entonces habra errores como que hay error en su estructura, pero bueno para solucionarlo solo tienes que migrar unicamente la de projects o como sea el nombre que hayas usado. Para solo migrar una tabla, puedes usar

php artisan migrate:refresh --path=database/migrations/2021_09_01_010730_create_projects_table.php

Tiene que ser un migrate:refresh porque si pones solo migrate dira que no hay nada que migrar.

Para recapitular

  1. Creas tus migraciones de: users, projects, cities, companies
  2. En consola: 鈥減hp artisan migrate鈥 para migrar las tablas a la database
  3. Creas las FK en la tabla de projects
  4. Refrescas la migracion, pero solo de la tabla projects para que cree las FK y eso es con:
    php artisan migrate:refresh --path=database/migrations/2021_09_01_010730_create_projects_table.php

Espero no tengas este problema, pero a mi me tomo al menos una horita antes de encontrar la solucion鈥 quiza es obvio, pero habemos quienes no lo cachamos rapido 馃槂

Por la version de PHP (7.1.33) que utiliza la profesora yo diria que el proyecto se hizo en Laravel 5.8

No tengo pruebas, pero tampoco dudas. #SinMiedoAlExito

SI desean tambien pueden usar docker, es bastande comodo en especial en unix
https://laravel.com/docs/8.x/installation#choosing-your-sail-services

Excelente, muy bien explicado y directo al grano.

me sale el siguiente error, ayuda!!!

Para poder ejectuar php artisan tinker (me marcaba error), tuve que agregar el directorio $HOME/.composer/vendor/bin a mi PATH en MacOS.
Puedes ver el contenido actual de tu PATH con la siguiente instrucci贸n desde consola:

echo $PATH

Pero como uso oh-my-zsh, edit茅 el archivo .zshrc en mi directorio HOME y agregu茅 las siguientes l铆neas:

export PATH="$PATH:$HOME/.composer/vendor/bin"

# Original PATH:
# <Aqu铆 guard茅 mi PATH original como respaldo>

De hecho, esto se menciona en la documentaci贸n oficial de Laravel:



Para los que usan MySQL Workbench para crear la base de datos. Hay una manera de crear las migraciones directamente desde el programa. Ac谩 les dejo una gu铆a:

https://laravel-news.com/export-from-mysql-workbench-to-a-laravel-migration

No estoy de seguro de como hacerlo me podrian decir como instalarlo en linux. los comandos que estan al principio no me funcionaron

驴Que seria mas potente para un manejador de proyectos al que se le haran cambios mas adelante en la base de datos o como estan acomodados los datos? Crear la DB mediante querys como esta vez o estar realizando la migracion? o se pueden realizar las dos?

Gracias por la explicacion tan clara.

Conexi贸n a la base de datos configurada en el archivo .env revision de la conexi贸n usando tinker.
**Tinker: ** Es una consola de comandos 煤nica de Laravel donde podremos hacer pruebas funcionamiento sin tener que ejecutar toda la aplicaci贸n e interactuar con los m茅todos y clases de nuestro proyecto.

Dejo repositorio con proyecto en Laravel 9, se han creado las migraciones, modelos (los modelos est谩n en blanco)

https://github.com/TheDiego350z1/project-manager

Instrucciones:

  • Clonar repositorio
  • Ejecutar:
composer install
  • Crear base de datos (puede ser el nombre que quieran)
  • Colocar en el archivo .env el nombre de la base de datos
DB_DATABASE=your_data_base
  • Ejecutar
php artisan migrate
  • Seguir el curso con normalidad

Podemos Abreviar el c贸digo de creaci贸n de foreing keys de la siguiente forma

public function up()
{
   Schema::create('projects', function (Blueprint $table) {
	$table->id();
	$table->foreignId('city_id')->constrained('cities');
	$table->foreignId('company_id')->constrained('companies');
	$table->foreignId('user_id')->constrained('users');
	$table->string('name');
	$table->date('execution_date');
	$table->tinyInteger('is_active');
        $table->timestamps();
  });
}

El foreignId m茅todo es un alias para unsignedBigInteger mientras que el constrained m茅todo utilizar谩 convenciones para determinar la tabla y el nombre de la columna a la que se hace referencia.
Fuente: documentaci贸n laravel

Si van a utilizar MySQL, aqu铆 dejo el dump:

CREATE DATABASE IF NOT EXISTS project_manager;
use project_manager;

SET foreign_key_checks = 0;
DROP TABLE IF EXISTS users;
CREATE TABLE users (
  user_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NULL,
  created_at DATETIME,
  updated_at DATETIME,
  PRIMARY KEY (user_id)
);

DROP TABLE IF EXISTS companies;
CREATE TABLE companies (
  company_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NULL,
  created_at DATETIME,
  updated_at DATETIME,
  PRIMARY KEY (company_id)
);

DROP TABLE IF EXISTS cities;
CREATE TABLE cities (
  city_id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NULL,
  created_at DATETIME,
  updated_at DATETIME,
  PRIMARY KEY (city_id)
);

DROP TABLE IF EXISTS projects;
CREATE TABLE projects (
  project_id INT NOT NULL AUTO_INCREMENT,
  city_id INT NULL,
  company_id INT NULL,
  user_id INT NULL,
  name VARCHAR(30) NULL,
  execution_date DATE NULL,
  is_active TINYINT NULL,
  created_at DATETIME NULL,
  updated_at DATETIME NULL,
  PRIMARY KEY (project_id)
);
ALTER TABLE projects ADD FOREIGN KEY (city_id) REFERENCES cities(city_id);
ALTER TABLE projects ADD FOREIGN KEY (company_id) REFERENCES companies(company_id);
ALTER TABLE projects ADD FOREIGN KEY (user_id) REFERENCES users(user_id);
SET foreign_key_checks = 1;

隆Vamos bien!

Muy buen tutorial.

Muy buen tutorial.

Vengo del curso de PHP con laravel, me esta gustando mucho este framework.

Si utilizaste

composer global require laravel/installer

para instalar composer, puede ser que debas reiniciar tu terminal para ejecutar la siguiente instrucci贸n