2015-05-11 22 views
11

Sto cercando di eseguire il seguente migrazione:laravel 5 migrazione nome identificativo troppo lungo

public function up() 
{ 
    Schema::create('lifestyle_questions', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('question'); 
     $table->timestamps(); 
    }); 

    Schema::create('lifestyle_question_answers', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->integer('lifestyle_question_id')->unsigned(); 
     $table->foreign('lifestyle_question_id')->references('id')->on('lifestyle_questions'); 
     $table->string('answer'); 
     $table->timestamps(); 
    }); 

    Schema::create('user_lifestyle_question_answers', function(Blueprint $table) 
    { 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 
     $table->integer('lifestyle_question_answer_id')->unsigned(); 
     $table->foreign('lifestyle_question_answer_id')->references('id')->on('lifestyle_question_answers'); 
    }); 
} 

Ma ottengo il seguente errore:

[Illuminate\Database\QueryException] 
SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'user_lifestyle_question_answers_lifestyle_question_answer_id_foreign' is too long (SQL: alter table `user_lifestyle_question_answers` add constraint user_lifestyle_question_answers_lifestyle_question_answer_id_foreign foreign key (`lifestyle_question_answer_id`) references `lifestyle_question_answers` (`id`)) 

[PDOException] 
SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'user_lifestyle_question_answers_lifestyle_question_answer_id_foreign' is too long 

risposta

37

è possibile passare un nome di indice personalizzato come secondo parametro nel metodo foreign(). Oppure usa solo nomi di tabelle/colonne più brevi.

Così si vuole fare qualcosa di simile:

public function up() 
{ 
    Schema::create('lifestyle_questions', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('question'); 
     $table->timestamps(); 
    }); 

    Schema::create('lifestyle_question_answers', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->integer('lifestyle_question_id')->unsigned(); 
     $table->foreign('lifestyle_question_id', 'lq_id_foreign')->references('id')->on('lifestyle_questions'); 
     $table->string('answer'); 
     $table->timestamps(); 
    }); 

    Schema::create('user_lifestyle_question_answers', function(Blueprint $table) 
    { 
     $table->integer('user_id')->unsigned(); 
     $table->foreign('user_id')->references('id')->on('users'); 
     $table->integer('lifestyle_question_answer_id')->unsigned(); 
     $table->foreign('lifestyle_question_answer_id', 'lqa_id_foreign')->references('id')->on('lifestyle_question_answers'); 
    }); 
} 
+0

Che ha fatto il trucco, grazie! – geoffs3310

+1

Solo per informazione: gli identificatori MySQL devono sempre avere meno di 64 caratteri in base a http://dev.mysql.com/doc/refman/5.5/en/identifiers.html –