Cakephp WEB開発

[Cakephp3/4]マイグレーションsmallintとtinyint

※本サイトはPR表記を含みます。

DBの構造をバージョン管理的に扱うには、マイグレーションを利用するのが良いと思います。

Cakephpにはマイグレーション(Phinx)を利用できて、色んな独自の書き方ができます。別に素のSQLでも可能なんだけども、できるならフレームワークに寄せた方が何かと便利。

でもね、smallint型とかtinyint型とか、しいてはvarcharstringとして定義しないといけないのが一癖ありますね。

 

tinyintとsmallintの型指定はMysqlAdapterを利用

マイグレーション作成時、tinyintとsmallintを直接定義すると、型が存在しないとエラーが起きます。

InvalidArgumentException: An invalid column type "tinyint" was specified for column

そこで、マイグレーションファイルに

 shortcode
use Phinx\Db\Adapter\MysqlAdapter;

を追加し、

 shortcode
->addColumn('smallint_id', 'integer', ['null' => false, 'limit' => MysqlAdapter::INT_SMALL])
->addColumn('tinyint_id', 'integer', ['null' => false, 'limit' => MysqlAdapter::INT_TINY, 'default' => 1])

のようにlimitオプションにMysqlAdapterの定数を読み込めばOK!

型指定はどちらもintegerとして扱います。

 

「え、でもマイグレの結果見たら、tinyint(4)になっておま。tinyint(1)にしたいんだけど?」

そういう場合は、booleanで読み替えることができます。

 shortcode
->addColumn('boolean_id', 'boolean', ['null' => false, 'default' => 1])

 

マイグレのIDカラムを自動生成せずにID指定する

少し別腹話題ですが、マイグレのidカラムは自動生成されます。(なので書かなくてもOK)
でも、idカラムの長さとか別途指定したい場合は記述する必要が出てきますね。

そんな場合、

 shortcode
$this->table('hoge_tables', [
'id' => false,
'primary_key' => ['id'],
'comment' => 'hoge_tablesは好きなテーブル名を入れてね',
])

id 自動生成をfalseに指定しつつ、idカラムをaddします。

 shortcode
->addColumn('id', 'integer', ['null' => false, 'limit' => 11, 'identity' => true])

気を付けたいのが , 'identity' => trueを指定しておかないければ、 AUTO_INCREMENT になりません。

■ Cakephp3マイグレーション

https://book.cakephp.org/migrations/3/ja/index.html

 

-Cakephp, WEB開発
-