Edited at

CakePHP3でモデルのbeforeSaveを利用してidをインクリメントする

More than 1 year has passed since last update.

システムの仕様上、DBでidの値をオートインクリメントすることができない。

そんな時にCakePHP3でモデルのbeforeSave()を利用してidをインクリメントさせる。

public function beforeSave($event, $entity, $options) {

$query = $this->_table->find();
$ret = $query->select(['max_id' => $query->func()->max('id')])->first();
if($entity->isNew()) {
$entity->set('id', $ret['max_id'] +1);
}
}

$entity->isNew() でレコードを追加する場合のみ動作するようにする。