Phinxでプライマリキーとしてid以外を使う方法

目次

概要

PHPのマイグレーションツールとしてPhinxがあります。

Phinxはプライマリキーとしてデフォルトでidというカラムを使うので、それを使わないようにする方法を説明します。

方法

まず、Phinxでuserという名前のユーザの情報を管理するテーブルを作成してどのようになっているのか確認します。

この時、プライマリキーをuser_idというカラムにしようとしています。

データベースには、MySQLを想定しています。

$table = $this->table('user');
$table->addColumn('user_id', 'integer')
      ->addColumn('user_name', 'string')
      ->addColumn('user_password', 'string')
      ->create();

しかし、これではuser_idはテーブルのプライマリキーとして使うことができず、プライマリキーとしてidというカラムが新たに作られてしまいます。

そこで、下記のようにコードを書き換えて、プライマリキーにidを使わないようにして、user_idをプライマリキーとして使えるようにします。

$table = $this->table('user', array('id' => false, 'primary_key' => array('user_number')));
$table->addColumn('user_id', 'integer', array('identity' => true))
      ->addColumn('user_name', 'string')
      ->addColumn('user_password', 'string')
      ->create();

idを使わないようにするには、array('id' => false, 'primary_key' => array('user_number'))のように配列で、idを使わないようにfalseを指定し、primary_keyにプライマリキーとして使いたいカラム名を指定します。

このままでは、プライマリキーがAUTO_INCREMENTにならず不便です。

なので、さらにプライマリキーとなるカラムには'identity' => trueのようにidentityにtrueを指定します。

あとは、いつも通りcreate()などでテーブルを作成できます。

さいごに

情報が少なく探すのに苦労しました。

公式サイトには情報が少しだけ載っていますが、英語なので理解するのに時間がかかりました。