2015-11-10 35 views
8

Tôi đang cố gắng để viết một di chuyển cơ sở dữ liệu laravel nhưng tôi nhận được lỗi sau khoảng một chìa khóa nước ngoài:Laravel di cư không thể thêm nước ngoài chủ chốt

[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 

Các categoriessubcategories bảng làm được tạo ra nhưng khoá ngoại không. Đây là di chuyển của tôi:

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

Bất kỳ ý tưởng nào? Cảm ơn!

+0

Bạn không cần trường gia tăng tự động khi chỉ hủy tham chiếu khóa ngoài. –

Trả lời

18

Bạn nên tạo cột trước khi tạo một chìa khóa nước ngoài:

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

Tài liệu: http://laravel.com/docs/5.1/migrations#foreign-key-constraints

+0

Ồ! Lỗi lầm ngớ ngẩn. Cảm ơn bạn! –

+0

@RoemerBakker nếu bạn hài lòng với câu trả lời của tôi, bạn có thể chấp nhận nó :) –

+0

Vui lòng làm như vậy! Đã phải đợi thêm 5 phút nữa hôm qua khi bạn trả lời và quên chấp nhận nó sau đó. Chúc một ngày tốt lành! ;) –

0

Tôi quên để thêm ->get() các phương pháp tôi gọi.

Các vấn đề liên quan