CakePHP4でバーチャルフィールドのセッターを使って保存しようとしたときにはまった話

CakePHPのセッターを使って保存する方法

こんな感じのDBカラムがあるとして

first_name
last_name

こんな感じにEntityに書いておく

protected $_virtual = [
    'full_name',
]

protected function _setFullName($fullName)
{
    $this->set('first_name', expload(' ', $fullName)[1]);
    $this->set('last_name', expload(' ', $fullName)[0]);
}

これを実行すると

$user = $this->Users->newEntity([
    'full_name' => '椎名 林檎'
]);

$this->Users->save($user);

こんな風に保存ができるんですが、

first_name = '椎名'
last_name = '林檎'

私の場合ここで、
保存ができない事象が発生しまして、なんだ!!
となりましたとさ。

保存ができない原因

アクセシブルに存在しなかったからでした。
バーチャルフィールドも入れないとダメみたいです。

私は面倒だったのでアクセシブルごと消しました。

protected $_accessible = [
    full_name => true,
]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です