2015-11-10 25 views
8

Sto cercando di scrivere una migrazione di database laravel ma sto ottenendo il seguente errore di una chiave esterna:migrazione laravel non può aggiungere estera chiave

[Illuminate\Database\QueryException]                                                      
    SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'category_id' doesn't exist in table (SQL: alter table `subcategories` add constraint subcategories_category_id_foreign foreign key (`category_id`) references `categories` (`id`)) 



    [PDOException]                       
    SQLSTATE[42000]: Syntax error or access violation: 1072 Key column 'category_id' doesn't exist in table 

I categories e subcategories tabelle non vengono create, ma la chiave straniera no. Ecco la mia migrazione:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateCategoryTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('categories', function ($table) { 
      $table->increments('id')->unsigned(); 
      $table->string('name')->unique(); 
     }); 

     Schema::create('subcategories', function ($table) { 
      $table->increments('id')->unsigned(); 
      $table->foreign('category_id')->references('id')->on('categories'); 
      $table->string('name')->unique(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('categories'); 
     Schema::drop('subcategories'); 
    } 
} 

Qualche idea? Grazie!

+0

Non è necessario il campo di incremento automatico come non firmato solo il riferimento di chiave esterna. –

risposta

18

Si dovrebbe creare colonna prima di creare una chiave esterna:

$table->integer('category_id')->unsigned(); 
$table->foreign('category_id')->references('id')->on('categories'); 

Documentazione: http://laravel.com/docs/5.1/migrations#foreign-key-constraints

+0

Oh! Sciocco errore. Grazie! –

+0

@RoemerBakker se sei soddisfatto della mia risposta puoi accettarlo :) –

+0

Felice di farlo! Ho dovuto aspettare altri 5 minuti ieri quando hai risposto e ho dimenticato di accettarlo dopo. Buona giornata! ;) –

0

Ho dimenticato di aggiungere ->get() ai metodi ho chiamato.

Problemi correlati