Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Laravel Parte 2: Trabalhando com Autenticação, Relacionamentos e Testes

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

4 respostas

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.

solução!

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í!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software