CakePHP3(Phinx)のMigrationでtableをcreateすると、primaryのid
カラムは自動的に生成されますが、signed integerでauto_incrementになるので、名前を変えたりvarcharにしたりunsignedにしたり等、変更したい場合は、以下のようにします。
名前を変える
id
ではない違う名前にしたい場合は、$this->table()
のid
オプションで指定します。
$table = $this->table('new_table_name', ['id' => 'my_id_name']);
$table
->addColumn('title', 'string', ['limit' => 100])
・・・
->create();
自動生成をやめる
$this->table()
のオプションで、'id' => false
とすると自動生成されないので、自動生成をやめて、addColumn()
で追加します。
primary_key
オプションは、配列にして複数カラムを指定することもできます。
以下はidが varchar(50) なtableを作る例です。
$table = $this->table('new_table_name', ['id' => false, 'primary_key' => 'id']);
$table
->addColumn('id', 'string', [
'default' => null,
'limit' => 50,
'null' => false,
])
->addColumn('title', 'string', ['limit' => 100])
・・・
->create();
create()
の後にchangeColumn()
する
デフォルトではidはsignedなintegerになるので、unsignedにするには、create()
した後にchangeColumn()
すれば良いです。
(signed
オプションは、MySQLにのみ適用されるオプションです。)
$table = $this->table('new_table_name');
$table
->addColumn('title', 'string', ['limit' => 100])
・・・
->create();
$table
->changeColumn('id', 'integer', [
'identity' => true,
'signed' => false,
])
->save();
'identity' => true
を書かないと、auto_incrementじゃなくなってしまうので注意。