Storm\Drivers\Base\Object\Properties\ArrayProperty::PersistRelationshipChanges PHP Method

PersistRelationshipChanges() protected method

protected PersistRelationshipChanges ( Domain $Domain, UnitOfWork $UnitOfWork, $ParentEntity, $CurrentValue, $HasOriginalValue, $OriginalValue )
$Domain Storm\Core\Object\Domain
$UnitOfWork Storm\Core\Object\UnitOfWork
    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;
    }