2014-03-24 106 views
0

我一直在這裏尋找答案,但似乎沒有任何工作。我已經完成了Laravel和Sentry 2的基本安裝。首先,我已經添加了此遷移,以將user_id列添加到users表中。Laravel遷移的外鍵問題

Schema::table('users', function(Blueprint $table) 
    { 
     $table->integer('client_id')->unique; 
    }); 

然後,接下來我創建了我的客戶端表,並在不同的遷移中使用以下內容。

Schema::create('clients', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->integer('client_id')->unique; 
     $table->string('client_name'); 
     $table->date('expiry'); 
     $table->integer('cals'); 
    }); 

最後我創建在以下遷移

Schema::table('users', function(Blueprint $table) 
    { 
     $table->foreign('client_id') 
      ->references('client_id')->on('clients') 
      ->onDelete('cascade'); 
    }); 

誤差即時得到如下。

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `users` add constraint use 
rs_client_id_foreign foreign key (`client_id`) references `clients` (`client_id`) on delete cascade) 

我有點卡在我應該找的東西,他們都應該是索引?

+0

當您手動運行它們(即使用MySQL客戶端或phpmyadmin)時,這些查詢是否工作? – Kryten

+0

在phpmyadmin中說沒有定義索引。 – Nathan

回答

0
$table->integer('client_id')->unique; 

此行應爲:

$table->integer('client_id')->unique(); 

無論如何,如果你實際上是試圖用一個外鍵約束引用的「ID」欄上的「客戶」表上的「用戶」表,然後執行以下操作:

Schema::table('users', function(Blueprint $table) 
{ 
    $table->integer('client_id')->unsigned(); 

    $table->foreign('client_id') 
     ->references('id')->on('clients') 
     ->onDelete('cascade'); 
}); 

Schema::create('clients', function(Blueprint $table) 
{ 
    $table->increments('id'); 
    $table->timestamps(); 
    $table->string('client_name'); 
    $table->date('expiry'); 
    $table->integer('cals'); 
}); 
+0

這是唯一的位,我不知道我錯過了它。第二位實際上是否工作正如你試圖爲存在的表創建約束? (當你之後創建它) – Nathan

+0

是的,第二位應該工作。無論表是否存在,我總是爲每個表創建一個遷移,並在該遷移中包含任何外鍵約束。 – seeARMS