システムの仕様上、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()
でレコードを追加する場合のみ動作するようにする。