如何使用Laravel迁移创建具有auto_increment组的MyIsam表

时间:2016-10-26 16:16:11

标签: laravel-5 laravel-migrations

使用Laravel Migrations,有没有办法创建一个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;

在这种情况下,id AUTO_INCREMENT相对于grp列的值完成。你得到这样的东西:

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

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

.json

没有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作为下一个最佳选择。

答案 1 :(得分: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();
});