2016-10-26 30 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')) –