2015-11-10 18 views
8

Bir laravel veritabanı göç yazmaya çalışıyorum ama yabancı bir anahtarla ilgili aşağıdaki hatayı alıyorum:laravel göç ekleyemezsiniz yabancı anahtar

[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 

categories ve subcategories tablolar oluşturdu alırım ama Yabancı anahtar yok. İşte benim göçüm:

<?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'); 
    } 
} 

Herhangi bir fikrin var mı? Teşekkürler!

+0

Otomatik artış alanını sadece imzasız olarak değil, yalnızca yabancı anahtar referansına ihtiyacınız vardır. –

cevap

18

Bir yabancı anahtar oluşturmadan önce sütun oluşturun olmalıdır:

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

Dokümantasyon: http://laravel.com/docs/5.1/migrations#foreign-key-constraints Ben denilen yöntemlere ->get() eklemeyi unuttuğu

+0

Oh! Aptal bir hata. Teşekkür ederim! –

+0

@RoemerBakker Cevabımdan memnunsanız kabul edebilirsiniz :) –

+0

Bunu yapmaktan mutlu! Dün cevap verdikten sonra 5 dakika daha beklemek zorunda kaldı. İyi günler! ;) –

0

.