Baby step - 思考と実験の足跡

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

CakePHP3

tinyint型のカラムにtrueを入れたらバリデーションで拒否された件

ハマったこと boolean型の値を入れるカラムを用意する # マイグレーションファイルの一部 ->addColumn('set_tax_in', 'integer', [ 'default' => '0', 'limit' => MysqlAdapter::INT_TINY, 'null' => false, 'signed' => false, ]) 以下のようにバリデーショ…

マイグレーション作成時のテストは別DBを選択するとラク

ローカル環境への実行といえど、マイグレーションの動作テストに失敗するとテストデータの入れ直しが地味に大変。 変更箇所が多いとヌケモレも起きやすいので、リスクが増える。 そんなわけで、マイグレーション用のDBを用意するとラク。 # app.php 'Datasou…

Railsのfind_or_initialize_byにあたる関数をCakePHP3で作ってみた

idがあればupdateを、なければcreateをする $data = ['name' => 'hoge']; $entity = $table->findById($id)->first(); if ($entity != null) { $entity = $table->patchEntity($entity, $data) } else { $entity = $table->newEntity($data); } こんな感じの…

マイグレーションでカラムを追加したときには、エンティティのアクセサも更新する

priceカラムを追加するマイグレーションを作る # Migrationファイル public function change() { $this->table('bills') ->addColumn('price', 'integer', [ 'default' => 0, 'limit' => 11, 'null' => false, ]) ->update(); エンティティに値が入らない $d…

モデルで定義したバリデーションが動いているか確認する

背景 バリデーションが設定どおり動作するか確認する方法を調べてみました。 モデル側にバリエーションを設定 # Model public function validationBase(Validator $validator) { $validator ->nonNegativeInteger('id') ->allowEmpty('id', 'create'); $vali…

カラム名に予約語を含むモデルのクエリービルダーを作る

概要 あるモデルのカラム名がorderのような予約語の場合、クエリービルダー生成時にMySQLのエラーが起きる app.phpや.env中のquoteIdentifiersをtrueにすることでエスケープできるが、一部のクエリが書けなくなる クエリービルダー経由でも意外と簡単に書け…