
Cake2からCake4への移行作業にて、afterSave() の仕様の違いについてです。
Cake2: afterSave()
afterSave(boolean $created, array $options = array())
ブール値 $created
この保存によって新しいレコードが作成された場合は True引用: Cakephp2公式ドキュメント
というようにAPIドキュメントにあり、Cake2では新規保存と更新の判定は容易な形になっています。
Cake4は、$created 自体の引数ではなくなり、代替として isNew() メソッドを利用すればOKです。
Cake4: afterSave()
use ArrayObject;
use Cake\Datasource\EntityInterface;
use Cake\Event\EventInterface;
// クラス内にて
public function afterSave(EventInterface $event, EntityInterface $entity, ArrayObject $options): void
{
if ($entity->isNew()) {
// 新規保存の場合の処理
} else {
// 更新の場合の処理
}
}
$entity->isNew() を利用すれば、新規保存の場合、true を返してくれます。
これで、新規保存の場合と更新の場合の処理を切り分けることができますね。
■ Cakephp2: afterSave()
https://api.cakephp.org/2.10/class-Model.html#_afterSave
■ Cakephp4: afterSave()
https://book.cakephp.org/4/ja/orm/table-objects.html#aftersave