PHP
MySQL
cakephp3

CakePHP3のマイグレーションでMySQLのmediumtext型カラムを作る

CakePHP3のマイグレーションでMySQLのmediumtext型のカラムを作る

どうやって書くんだとちょっと調べたのでメモです。

普通には書けない

sample.php
// エラーになる
$table = $this->table('hogehoge');
$table->addColumn('column_name', 'medium_text', [
    'null' => false,
]);

どうやらtextでないといけない様子。
ならどう書けばいいのか…?

Cookbookに載ってました

Limitオプション

どうやらLimitオプションを使うといけるらしいです。
具体的な書き方は

sample.php
// OK
$table = $this->table('hogehoge');
$table->addColumn('column_name', 'text', [
    'limit' => Phinx\Db\Adapter\MysqlAdapter::TEXT_MEDIUM // ←これ
    'null' => false,
]);

基本的にはMysqlAdapterを使ってより細かく型を指定できるようでした。
マイグレーションファイルにuse Phinx\Db\Adapter\MysqlAdapter;を追加すれば、MysqlAdapter::TEXT_MEDIUMだけでもいけます。
あんまりMEDIUMTEXTとか大きな型を使うことはないと思うんですが、だからこそ使うときに忘れそうなので、備忘録がてらの投稿です。

その他

試してはいませんが、

sample.php
$this->execute('ALTER TABLE hogehoge ADD column_name mediumtext');

多分これでもいけるんじゃないかとは思います。

補足

今回はmediumtextでしたが、この書き方をすればbigintなども書けるようになります。
(bigintはbigintegerで普通に書けますが、念のため)