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

bigIncrement incompatível com integer

Boa tarde. Na parte de rodar o comando:

php artisan migrate

Meu console devolveu o seguinte erro:

PDOException::("SQLSTATE[HY000]: General error: 3780 Referencing column 'serie_id' and referenced column 'id' in foreign key constraint 'temporadas_serie_id_foreign' are incompatible.")

Precisei alterar a chave única auto incremental das tabelas para:

$table->increments('id');

ao invés de

$table->bigIncrements('id');

Outra questão é que os campos que formam a Foreign key, precisei incluir a propriedade "unsigned"

$table->integer('serie_id')->unsigned();
 $table->foreign('serie_id')->references('id')->on('series');

Teria alguma explicação do porquê o código do instrutor funcionou sem essas modificações? Tem a ver com a versão do Laravel ou MySQL?

Uso Laravel 5.8 e MySQL 8.0

2 respostas
solução!

Fala, Guilherme!

No meu projeto eu também utilizei o Laravel 5.8.

Você chegou a testar o código no MySQL 5.7, que foi a versão utilizada no curso?

Honestamente não sou especialista em banco (até por isso uso ORMs rsrsrs), mas não era pra ser necessário o unsigned não.

Olá Vinícius.

Desculpe o equívoco, eu acabei não percebendo que no curso está sendo utilizado o SQLite igual o curso anterior.

Já descobri a causa... pelo fato do MySQL ser um SGBD mais completo, ele tem a separação dos tipos INT e BIGINT, coisa que o SQLite não possui.. no SQLite tanto bigIncrement() quanto increment() vai sair INTEGER do mesmo jeito !

O unsigned possui essa característica similar, dei uma pesquisada olhando a diferença entre o increment e o bigincrement e esse efeito do unsigned... Parece que ambos persistem o inteiro como unsigned, caso o banco de dados utilizado possua essa característica.

Já quando é criado um atributo integer $table->integer($foo), parece que esse atributo permite incluir números inteiros negativos, pois não é setado por default esse unsigned, coisa que um increment não faria pela regra. Li esse artigo e me esclareceu melhor, acho que é isso rsrs

https://laracasts.com/discuss/channels/laravel/difference-between-increments-and-bigincrements

Obrigado !

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