2017-02-18 112 views
0

我在學習laravel,現在我無法遷移數據庫。我已經在phpmyadmin中創建了數據庫,已經閱讀了文檔並在網絡上對此問題進行了研究。然而,當我做遷移,則會持續發送相同的消息:Laravel - 無法遷移DB

SQLSTATE[HY000]: General error: 1005 Can't create table `YYYY`.`#sql-269c_1c1` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table ` cars` add constraint `cars_company_id_foreign` foreign key (`Company_id`) references `companies` (`id`) on delete cascade on update cascade) 

這是代碼:

2014_10_12_000000_create_cars_table

Schema::create('cars', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('Company_id')->unsigned(); 
     $table->foreign('Company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade'); 
     $table->string('Model'); 
    }); 

2014_10_12_000000_create_companies_table

Schema::create('companies', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('Company'); 
    }); 
+0

什麼數據庫引擎是你使用? – Paras

回答

1

Laravel嘗試運行你的遷移按1)時間,2)字母順序排列。既然你同時給你的兩個遷移,它將按照字母順序來代替。

這實際上意味着你試圖首先創建汽車表,外鍵約束指向一個表公司 - 但這個表尚不存在,因爲它將在下一個創建移民。

正確地命名您的遷移,它應該自行解決。 :)

+0

我已經更改了文件名中的日期以便讓它們按順序遷移。它的工作原理。謝謝!! – Adato

1

是因爲喬爾賽義德注意遷移命名約定。 要避免這些錯誤,你可以使用遷移命令

第一步命令行下面
運行

php artisan make:migration create_companies_table 

第二步

這將使空白遷移模式在數據庫中,然後編輯它就像下面那樣

Schema::create('companies', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('Company'); 
    }); 

步驟3中的命令行下面 運行

php artisan make:migration create_companies_table 

第4步 這將使空白遷移模式在數據庫中,然後編輯它像下面

Schema::create('cars', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('Company_id')->unsigned(); 
     $table->foreign('Company_id')->references('id')->on('companies')->onDelete('cascade')->onUpdate('cascade'); 
     $table->string('Model'); 
    }); 
+0

Didnt知道它可以進行遷移文件。現在起作用了。謝謝! – Adato

+0

如果它幫助你,請將答案標記爲正確 – sumit

+0

我該怎麼做?我不知道我們可以將答案標記爲正確。 – Adato