Schema::create('projects', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); Schema::create('users', function (Blueprint $table) { $table->id(); $table->foreignId('project_id')->constrained(); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); Schema::create('tasks', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained(); $table->string('name'); $table->timestamps(); }); Cuando ejecuto la php artisan migrate , solo se crea la tabla de usuarios y luego el proceso de migración se detiene...
SQLSTATE[HY000]: Error general: 1005 No se puede crear la tabla
Projectname.users(errno: 150 "La restricción de clave externa está formada incorrectamente") (SQL: alterar la tablausersagregar restricciónusers_project_id_foreignclave externa (project_id) hace referenciaprojects(id))
Busque su directorio de migración , verá todos sus archivos de migración, como 2014_10_12_000000_create_users_table
Está recibiendo este error porque su project_create_table debe migrarse antes que el archivo create_users_table .
De forma predeterminada, laravel hace que cada nombre de archivo de migración tenga un formato de date_time , como 2014_10_12_000000_table_names.php , de modo que todos los archivos se pueden migrar en serie.
Así que cambie su nombre de archivo create_users_table con una date_time , para que pueda migrar después de projects_create_table , como:
2020_01_01_000000_create_projects_table.php 2020_01_01_000001_create_users_table.php Ahora, si ejecuta php artisan migrate , al principio se creará la tabla de projects , luego la tabla de users .
Usó constrained() que tiende a encontrar el project de tabla o user No los projects o users . En ese caso, debe especificar el nombre de la tabla en constrained() .
Schema::create('projects', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); Schema::create('users', function (Blueprint $table) { $table->id(); $table->foreignId('project_id')->constrained('projects'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); Schema::create('tasks', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained('users'); $table->string('name'); $table->timestamps(); });Puedes estudiar más desdeaquí