1
0
mirror of synced 2025-02-28 01:43:20 +03:00

DDC-3490 - preventing invalid association values from being persisted

This commit is contained in:
Marco Pivetta 2015-01-18 00:53:57 +01:00
parent 71a6a88de8
commit d0c0f43c79

@ -731,7 +731,7 @@ class UnitOfWork implements PropertyChangedListener
try { try {
$this->computeAssociationChanges($assoc, $val); $this->computeAssociationChanges($assoc, $val);
} catch (\Exception $ex) { } catch (\Exception $ex) {
throw ORMInvalidArgumentException::computeAssociationChangesError($entity, $assoc['fieldName'], $ex->value); throw ORMInvalidArgumentException::computeAssociationChangesError($entity, $assoc['fieldName'], $val);
} }
if ( ! isset($this->entityChangeSets[$oid]) && if ( ! isset($this->entityChangeSets[$oid]) &&
@ -2188,12 +2188,31 @@ class UnitOfWork implements PropertyChangedListener
case ($relatedEntities instanceof Collection): case ($relatedEntities instanceof Collection):
case (is_array($relatedEntities)): case (is_array($relatedEntities)):
if (($assoc['type'] & ClassMetadata::TO_MANY) <= 0) {
throw ORMInvalidArgumentException::invalidAssociation(
$this->em->getClassMetadata($assoc['targetEntity']),
$assoc,
$relatedEntities
);
}
foreach ($relatedEntities as $relatedEntity) { foreach ($relatedEntities as $relatedEntity) {
$this->doPersist($relatedEntity, $visited); $this->doPersist($relatedEntity, $visited);
} }
break; break;
case ($relatedEntities !== null): case ($relatedEntities !== null):
$targetClass = $this->em->getClassMetadata($assoc['targetEntity'])->name;
if (! $relatedEntities instanceof $targetClass) {
throw ORMInvalidArgumentException::invalidAssociation(
$this->em->getClassMetadata($assoc['targetEntity']),
$assoc,
$relatedEntities
);
}
$this->doPersist($relatedEntities, $visited); $this->doPersist($relatedEntities, $visited);
break; break;