Boa Tarde Vinícius! Executei o comando como está no curso, php artisan migrate e apareceu esse erro:
Foreign key constraint is incorrectly formed
Estou usando o mysql
Boa Tarde Vinícius! Executei o comando como está no curso, php artisan migrate e apareceu esse erro:
Foreign key constraint is incorrectly formed
Estou usando o mysql
Olá, Leandro. Algum tipo na sua migration foi definido de forma incorreta. Se você definiu um id como bigIncrements
, por exemplo, precisa definir a chave estrangeira como bigInteger
ou unsignedBigIngeter
.
Oi Vinícius! Então, fiz dessa forma que falou conforme o código abaixo, porém o erro ainda persiste. Estou usando o mysql.
<?php
use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;
class CriarTabelaSeries extends Migration { /**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('series', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('nome');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('series');
}
}
<?php
use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;
class CriarTabelaTemporadas extends Migration { /**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('temporadas', function (Blueprint $table) {
$table->increments('id');
$table->integer('numero');
$table->unsignedBigIngeter('serie_id');
$table->foreign('serie_id')
->references('id')
->on('series');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('temporadas');
}
}
<?php
use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;
class CriarTabelaEpisodios extends Migration { /**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('episodios', function (Blueprint $table) {
$table->increments('id');
$table->integer('numero');
$table->unsignedBigIngeter('temporada_id');
$table->foreign('temporada_id')
->references('id')
->on('temporadas');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('episodios');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Serie extends Model { public $timestamps = false; protected $fillable = ['nome'];
public function temporadas()
{
return $this->hasMany(Temporada::class);
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Temporada extends Model { public function episodios() { return $this->hasMany(Episodio::class); }
public function serie()
{
return $this->belongsTo(Serie::class);
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Episodio extends Model { public function temporada() { return $this->belongsTo(Temporada::class); } }
Já tinha a tabela Series criada. Executei apenas a criação dos models e das migrations para temporada e episodios.
O erro:
Schema::create('temporadas', function (Blueprint $table) {
$table->increments('id');
...
$table->unsignedBigIngeter('temporada_id');
Os tipos não batem. Você criou um inteiro pra temporadas.id e um bigInteger pra episodios.temporada_id.
Vi aqui Vinicius! Agora funcionou sim!
Obrigado aí!