Baby step - 思考と実験の足跡

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

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

priceカラムを追加するマイグレーションを作る

# Migrationファイル

public function change()
    {
        $this->table('bills')
            ->addColumn('price', 'integer', [
                'default' => 0,
                'limit' => 11,
                'null' => false,
            ])
            ->update();

エンティティに値が入らない

$data = {
    'name' => 'hoge',
    'price' => 2000, # 追加したカラム
];
$entity = $table->newEntity($data);
debug($entity);
object(App\Model\Entity\Bill) {

    'name' => 'hoge',
    '[accessible]' => [
        'name' => true,
(中略)

登録できない...。 試しにbin/cake bake model billsでTableとEntityを更新してみる。

object(App\Model\Entity\Bill) {

    'name' => 'hoge',
        'price' => 2000,
    '[accessible]' => [
        'name' => true,
(中略)

うまく行った!! 差分を見るとEntity$_accessibleが不足していた様子。 マイグレーション実行時に、Cake側が自動で追加してくれないんですね。

参考文献

以下の記事でも動揺のケースが紹介されています。

<CakePHP>追加したカラムにデータが保存されない - Qiita

CakePHP3のCookBookでは、このあたりですね。

一括代入 (Mass Assignment)