2016-09-28 90 views
1

我正在使用Laravel 5.3和MySQL。Laravel將外鍵引用移動到具有兩列的主鍵?

如何添加Laravel外鍵對兩列主鍵的引用?

下面是我的遷移腳本(在database/migrations/目錄下)

有兩列

public function up() 
{ 
    Schema::create('X', function (Blueprint $table) { 
     $table->integer('a')->unsigned(); 
     $table->integer('b')->unsigned(); 
     $table->primary(['a', 'b']); 
     $table->timestamps(); 
    }); 
} 

,並在另一個主鍵,

public function up() 
{ 
    Schema::create('Y', function (Blueprint $table) { 
     $table->increments('k'); 
     $table->foreign('c')->references(['a', 'b'])->on('X')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

然而,這不是」這樣工作:我怎麼能做到這一點?

回答

2

使用添加外鍵約束到你的數據庫Schema::table()代替Schema::create()

下面,片段表示修正:

// File name: 2016_09_28_create_x_table.php 
public function up() 
{ 
    // Create table X 
    Schema::create('X', function (Blueprint $table) { 
     $table->integer('a')->unsigned(); 
     $table->integer('b')->unsigned(); 
     $table->primary(['a', 'b']); 
     $table->timestamps(); 
    }); 
} 


// File name: 2016_09_28_create_y_with_foreignkey_table.php 
public function up() 
{ 
    // Create table Y 
    Schema::create('Y', function (Blueprint $table) { 
     $table->increments('k'); 
     $table->integer('c')->unsigned(); 
     $table->timestamps(); 
    }); 

    // Add Foreign key 
    Schema::table('Y', function (Blueprint $table) { 
     $table->foreign('c')->references('a')->on('X')->onDelete('cascade'); 
    }); 
} 

記住unsigned()應在c來施加。

+0

爲你寫的我都做了,但我沒有得到它的工作。你有沒有嘗試過這種方法?有任何想法嗎?非常感謝! – ackuser

+0

你得到了什麼錯誤? – nyedidikeke

+0

更新了我的答案。 – nyedidikeke

0

這是我發現模擬組合鍵和FK指向在Laravel 5.3中工作的組合鍵的唯一方法 - 我錯過了Laravel中更緊湊的解決方案。

總之,這裏是我的代碼

// File name: 2016_09_28_create_x_table.php 
public function up() 
{ 
    // Create table X 
    Schema::create('X', function (Blueprint $table) { 
     $table->increments('j'); 
     $table->integer('a')->unsigned(); 
     $table->integer('b')->unsigned(); 
     $table->unique(['a', 'b']); 

     $table->timestamps(); 
    }); 
} 


// File name: 2016_09_28_create_y_with_foreignkey_table.php 
public function up() 
{ 
    // Create table Y 
    Schema::create('Y', function (Blueprint $table) { 
     $table->increments('k'); 
     $table->integer('c')->unsigned(); 
     $table->timestamps(); 
    }); 

    // Add Foreign key 
    Schema::table('Y', function (Blueprint $table) { 
     $table->foreign('c')->references('j')->on('X')->onDelete('cascade'); 
    }); 
} 
相關問題