diff --git a/src/BuilderTrait.php b/src/BuilderTrait.php index acfc37a..423d649 100644 --- a/src/BuilderTrait.php +++ b/src/BuilderTrait.php @@ -116,17 +116,21 @@ public function update(array $values) // update version table records $db = $this->model->getConnection(); foreach ($affectedRecords as $record) { - // get versioned values from record + // get current version values + $currentVersionValues = $db->table($this->model->getVersionTable()) + ->where([ + [$this->model->getVersionKeyName(), $record->{$this->model->getKeyName()}], + [$this->model->getVersionColumn(), $record->{$this->model->getLatestVersionColumn()}] + ])->first(); + + // merge current version with updated values to create new version foreach($this->model->getVersionedAttributeNames() as $key) { - $recordVersionValues[$key] = (isset($versionValues[$key])) ? $versionValues[$key] : $record->{$key}; + $recordVersionValues[$key] = (isset($versionValues[$key])) ? $versionValues[$key] : $currentVersionValues->{$key}; } - // merge versioned values from record and input - $recordVersionValues = array_merge($recordVersionValues, $versionValues); - // set version and ref_id $recordVersionValues[$this->model->getVersionKeyName()] = $record->{$this->model->getKeyName()}; - $recordVersionValues[$this->model->getVersionColumn()] = $record->{$this->model->getVersionColumn()}+1; + $recordVersionValues[$this->model->getVersionColumn()] = $record->{$this->model->getLatestVersionColumn()}+1; // insert new version if(! $db->table($this->model->getVersionTable())->insert($recordVersionValues)) {