Laravel - Erro ao criar tabela com foreign key

1 resposta
laravel
C
public function up()
{
    
    Schema::create('psicologos', function (Blueprint $table) {
        $table->increments('psi_codigo');
        $table->string('psi_nome');
        $table->datetime('psi_data_nascimento');
        $table->string('psi_funcao_exercida');
        $table->datetime('psi_data_cadastro');
        $table->integer('psi_ativo');
        $table->datetime('psi_data_desligamento');
        $table->string('psi_matricula');
        $table->string('psi_crp');
        $table->string('psi_enfase');
        $table->string('psi_cep');
        $table->string('psi_endereco');
        $table->string('psi_numero');
        $table->string('psi_complemento');
        $table->string('psi_bairro');
        $table->string('mun_codigo');
        $table->integer('uf_codigo');
        $table->string('psi_celular');
        $table->string('psi_email');
        $table->string('psi_semestre');
        $table->string('psi_atividades');
        $table->string('psi_codigo_supervisor');
        $table->timestamps();
    });
}

public function up()
{

    Schema::create('atividades', function (Blueprint $table) {
        $table->increments('atv_codigo');
        $table->integer('atv_semestre');
        $table->string('atv_atividades');
        $table->integer('psi_codigo_supervisor');
        $table->integer('psi_codigo')->unsigned();
        $table->foreign('psi_codigo')->references('psi_codigo')->on('psicologos');

        $table->timestamps();
    });
}

o erro que está retornando é esse

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1824 Failed to open the referenced table 'psicologos' (SQL: alter tableatividadesadd constraintatividades_psi_codigo_foreignforeign key (psi_codigo) referencespsicologos(psi_codigo`

1 Resposta

C

Este erro ocorreu para mim porque criei a tabela de migração com a chave estrangeira nela em primeiro lugar antes que a chave existisse como uma chave primária em sua tabela original. As migrações são executadas na ordem em que foram criadas, conforme indicado pelo nome do arquivo gerado após a execução migrate:make. Por exemplo 2014_05_10_165709_create_student_table.php.

A solução foi renomear o arquivo com a chave estrangeira para um horário anterior ao arquivo com a chave primária, como recomendado aqui: http://forumsarchive.laravel.io/viewtopic.php?id=10246

Criado 22 de dezembro de 2018
Ultima resposta 22 de dez. de 2018
Respostas 1
Participantes 1