3

Laravel Migrations を使用して、2 列の主キーとそのうちの 1 つで自動インクリメントを持つ 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 |
+--------+----+---------+
4

2 に答える 2

2

さて、私は 2 つの移行でそれを行うことができました。 1. テーブルを作成し、通常どおり 2 つのフィールドに 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();
});
于 2016-10-27T14:29:40.987 に答える