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

Problema com migrate: General error: 1215 Cannot add foreign key constraint

Olá,

Estou usando o mysql e estou enfrentando problemas com as migrates da primeira aula, sempre que executo o comando de migrate no artisan recebo:

General error: 1215 Cannot add foreign key constraint

Verifiquei a digitação (inclusivei colei do o código da migrate do exercicio para garantir) mas continuo com o problema. Busquei algumas soluções e as sugestões que já segui foram:

1-> Associar a chave estrangeira em uma 'etapa' separada.

      Schema::table('temporadas', function($table) {
            $table->foreign('serie_id')->references('id')->on('series');
        });

2-> Definir a chave estrangeira como unsigned:

 $table->integer('serie_id')->unsigned();

Mas nada funcionou, alguém pode me ajudar a entender o porquê disso ?

4 respostas

Ps. Só pra garantir eu baixei o projeto (do 1 exercicio da aula 2), ajustei os dados para acessar o banco e testei. Aconteceu o mesmo erro.

solução!

Oi, Daniel.

Você pode colar aqui o código completo das 2 migrations (de série e de temporadas)?

Esse erro geralmente acontece quando há uma incompatibilidade entre os tipos da chave primária referenciada pela chave estrangeira e a própria chave estrangeira.

Olá Vinicius,

De fato, esse era o problema, adicionei o unsigned nos tipos que iriam receber a chave estrangeira e funcionou mas somente após adotar um outro procedimento que descrevo a seguir.

O ponto é que eu havia removido a tabela séries antes de adicionar as novas migrations, após adiciona-las quando eu tentava usar o comando php artisan migrate ele me retornava esse problema e criava apenas a tabela temporadas.

No meu entender a tabela de Series deveria ser crianda primeiro, então não entendi bem. Busquei uma alternativa para executar apenas uma migration espcifica (para criar novamente a tabela de séries e checar o tipo correto do campo id), mas não consegui.

Lendo a documentação encontrei o comando do artisan 'migrate:refresh'. Foi somente com ele que o ORM meio que 'entendeu' a ordem para executar a migrations.

Olá, Daniel!

Que bom que o problema foi resolvido.

Quanto à migration de series que não estava sendo executada, é porque as migrations que já foram executadas uma vez não são executadas de novo. No banco de dados ficam salvas quais migrations já foram rodadas.

O migrate:refresh roda todas novamente, atualizando esta informação no banco sobre quais já foram executadas.

Forte abraço e bons estudos!