2016-10-26 42 views
1

使用Laravel Migrations,有沒有辦法使用兩列主鍵和其中一個主鍵創建一個MyISAM表?如何使用Laravel遷移創建具有組auto_increment的MyIsam表

CREATE TABLE animals (
    grp ENUM('fish','mammal','bird') NOT NULL, 
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (grp,id) 
) ENGINE=MyISAM; 

在這種情況下,AUTO_INCREMENT ID是相對於grp列的值完成的。而你得到的東西是這樣的:

+--------+----+---------+ 
| grp | id | name | 
+--------+----+---------+ 
| fish | 1 | lax  | 
| mammal | 1 | dog  | 
| mammal | 2 | cat  | 
| mammal | 3 | whale | 
| bird | 1 | penguin | 
| bird | 2 | ostrich | 
+--------+----+---------+ 

回答

0

嗯,我設法做兩個遷移 1.創建表並將PK照常分配給兩個字段。 2.創建新的遷移以修改AUTO_INCREMENT屬性並將其添加到id列。

create_animals_table:

Schema::create('animals', function(Blueprint $table) { 
    $table->engine = 'MyISAM'; 
    $table->enum('grp', ['fish', 'mammal', 'bird']); 
    $table->unsignedBigInteger('id'); 
    $table->char('name', 30); 

    $table->primary(['grp', 'id']); 
}); 

add_auto_increment_to_animals_table:

Schema::table('animals', function ($table) { 
    $table->bigIncrements('id')->unsigned()->change(); 
}); 
1

嘗試以下操作:

Schema::create('animals', function(Blueprint $table) { 
    $table->engine = 'MyISAM'; 
    $table->enum('grp', ['fish', 'mammal', 'bird']); 
    $table->bigIncrements('id'); // no mediumIncrements 
    $table->char('name', 30); 
    $table->primary(['grp', 'id']); 
}); 

沒有一個mediumIncrements功能,所以使用bigIncrements作爲一個最好的選擇。

+0

謝謝,但沒有運氣:照亮\數據庫\ QueryException] SQLSTATE [42000]:語法錯誤或訪問衝突:1068多主鍵定義(SQL:alter table'animals'添加主鍵'animals_ grp_id_primary'('grp','id')) –

相關問題