protected function PersistRelationshipChanges(Object\Domain $Domain, Object\UnitOfWork $UnitOfWork, $ParentEntity, $CurrentValue, $HasOriginalValue, $OriginalValue)
{
$RelationshipChanges = [];
$OriginalEntities = [];
$CurrentEntities = [];
if ($HasOriginalValue) {
$OriginalEntities =& $OriginalValue;
}
if (is_array($CurrentValue)) {
$CurrentEntities =& $CurrentValue;
} else {
throw new Object\ObjectException('Invalid value for property on entity %s, array expected, %s given', $this->GetEntityType(), \Storm\Core\Utilities::GetTypeOrClass($CurrentValue));
}
if ($CurrentEntities === $OriginalEntities) {
return $RelationshipChanges;
}
$NewEntities = array_udiff($CurrentEntities, $OriginalEntities, [$this, 'ObjectComparison']);
$RemovedEntities = array_udiff($OriginalEntities, $CurrentEntities, [$this, 'ObjectComparison']);
foreach ($NewEntities as $NewEntity) {
$RelationshipChanges[] = new Object\RelationshipChange($this->RelationshipType->GetPersistedRelationship($Domain, $UnitOfWork, $ParentEntity, $NewEntity), null);
}
foreach ($RemovedEntities as $RemovedEntity) {
$RelationshipChanges[] = new Object\RelationshipChange(null, $this->RelationshipType->GetDiscardedRelationship($Domain, $UnitOfWork, $ParentEntity, $RemovedEntity));
}
return $RelationshipChanges;
}