diff --git a/src/AbstractMySqlGateway.php b/src/AbstractMySqlGateway.php index bea4124..ac15f13 100644 --- a/src/AbstractMySqlGateway.php +++ b/src/AbstractMySqlGateway.php @@ -127,11 +127,13 @@ public function persist(EntityInterface ...$entities): bool ? $entity->getEntityCollection() : $this->getDefaultEntityCollection(); + $extractedData = $this->getHydrator()->extract($entity); + if ($entity->isNew()) { $query = (new Insert(new Quoter("`", "`"))) ->into($collection); - if (is_null($entity[$entity->getEntityIdentifier()])) { + if (is_null($extractedData[$entity->getEntityIdentifier()])) { $colsToRemove[] = $entity->getEntityIdentifier(); } } else { @@ -144,23 +146,21 @@ public function persist(EntityInterface ...$entities): bool // skip cols handled by delegates $colsToRemove = array_merge($colsToRemove, array_keys($this->getDelegatePersisters())); - $fields = array_diff($entity->getEntityFields(), $colsToRemove); + $fields = array_diff(array_keys($extractedData), $colsToRemove); $query->cols($fields); foreach ($fields as $field) { - $value = $entity[$field]; + $value = $extractedData[$field]; if ($value instanceof \DateTime) { $query->bindValue($field, $value->format('Y-m-d H:i:s')); } else { - $query->bindValue($field, $entity[$field]); + $query->bindValue($field, $value); } } - if (!$entity->isNew()) { - $query->where($entity->getEntityIdentifier() . ' = ?', $entity[$entity->getEntityIdentifier()]); + $query->where($entity->getEntityIdentifier() . ' = ?', $extractedData[$entity->getEntityIdentifier()]); } - try { $this->query($query, $link); } catch (\Exception $e) {