tinyint型のカラムにtrueを入れたらバリデーションで拒否された件
ハマったこと
boolean
型の値を入れるカラムを用意する
# マイグレーションファイルの一部 ->addColumn('set_tax_in', 'integer', [ 'default' => '0', 'limit' => MysqlAdapter::INT_TINY, 'null' => false, 'signed' => false, ])
以下のようにバリデーションを設定する
# 該当テーブル $validator ->boolean('set_tax_in') ->requirePresence('set_tax_in') ->notEmpty('set_tax_in');
エンティティに渡すデータの配列を用意して、
[ 'set_tax_in' => true, (中略) ]
エンティティにデータを渡す。
エンティティをデバッグしてみると、
object(App\Model\Entity\[エンティティ名]) { 'set_tax_in' => null, (中略)
なぜだ。。。
ググってみる
下の記事を発見。
integer
型の数値しか受け付けないのでtrue/false
は受け取ってもらえないようです。
CakePHP3 EntityのsetでDBの型によってはまったこと - Qiita
そもそもboolean
型のカラムを作ればいいのでは?
[CakePHP3のマイグレーションではboolean
型のカラムを作れない]と(何故か)思い込んでいました。
以下のようにboolean
型でカラムを作れば、万事解決。
->addColumn('set_tax_in', 'boolean', [ 'default' => false, 'null' => false, ])
ちなみに、MySQL側には`TINYINT(1)'でカラムが作られます。