Baby step - 思考と実験の足跡

日常のちょっとした、気になって試したこと集です。

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)'でカラムが作られます。

参考記事