やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】プライマリキーを指定してデータを保存したい!

CakePHP3で、主キー(Primary Key)を指定してデータを保存しようとしたのですが、「Field 'hogehoge_id' doesn't have a default value」とエラーが出て保存失敗してしまいました・・。

コードは以下のようなもの。

    $tweet_info->hogege_id = 100; //主キーに100をセット
    $tweet_info->text = "hogege test";

    $entity = $this->tweets->newEntity();
    $entity = $this->tweets->patchEntity($entity, (array)$tweet_info);
    $ret = $this->tweets->save($entity);

    $this->log(print_r($entity, true), "debug");

エラーの原因は「Entity」の設定ファイルにありました(src/Model/Entity/に置いてあるやつです)

このファイルに「$_accessible」という設定がありますよね。

この中の「hogege_id」の設定が「false」になっていると、上記のように一括代入(mass assignment)をするときに「hogege_id」の値の変更ができなくなるそうです。

以下のように「'hogege_id' => true」とセットしてあげると、一括代入が可能になりsaveができるようになりましたとさ。

    protected $_accessible = [
        '*' => true,
        'hogege_id' => true,
    ];


公式にもちゃんとこのことが書いてありますね(一括代入の項目です)
http://book.cakephp.org/3.0/ja/orm/entities.html#mass-assignment

以上!