2016-10-26 4 views
1

Laravel Migrationsを使用して、2列の主キーとその1つに自動インクリメントを含むMyISAMテーブルを作成する方法はありますか?グループ化されたMyIsamテーブルの作成方法Larvel移行によるauto_increment

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 | 
+--------+----+---------+ 

答えて

0

まあ、私は2回の移行でそれを行うことができました 1.テーブルを作成し、通常どおりPKを2つのフィールドに割り当てます。 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

は、以下のことを試してみてください。そうbigIncrementsとして次の最良のオプションを使用mediumIncrements機能ありません

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']); 
}); 

+0

おかげで、ない運:[照らしなさい\データベース\のQueryException] SQLSTATE [42000]:構文エラーまたはアクセス違反:1068複数の主キー定義された(SQL:alter table 'animals'は主キー' animals_grp_id_primary'( 'grp'、' id')を追加します) –

関連する問題