private function insertElements(object $parent, array $collections, array $options) : void
    {
        $pushAllPathCollMap  = [];
        $addToSetPathCollMap = [];
        $pushAllPaths        = [];
        $addToSetPaths       = [];
        $diffsMap            = [];

        foreach ($collections as $coll) {
            $coll->initialize();
            if (! $this->uow->isCollectionScheduledForUpdate($coll)) {
                continue;
            }
            $insertDiff = $coll->getInsertDiff();

            if (empty($insertDiff)) {
                continue;
            }

            $mapping  = $coll->getMapping();
            $strategy = $mapping['strategy'];

            [$propertyPath ]         = $this->getPathAndParent($coll);
            $diffsMap[$propertyPath] = $insertDiff;

            switch ($strategy) {
                case ClassMetadata::STORAGE_STRATEGY_PUSH_ALL:
                    $pushAllPathCollMap[$propertyPath] = $coll;
                    $pushAllPaths[]                    = $propertyPath;
                    break;

                case ClassMetadata::STORAGE_STRATEGY_ADD_TO_SET:
                    $addToSetPathCollMap[$propertyPath] = $coll;
                    $addToSetPaths[]                    = $propertyPath;
                    break;

                default:
                    throw new LogicException('Invalid strategy ' . $strategy . ' given for insertCollections');
            }
        }

        if (! empty($pushAllPaths)) {
            $this->pushAllCollections(
                $parent,
                $pushAllPaths,
                $pushAllPathCollMap,
                $diffsMap,
                $options
            );
        }
        if (empty($addToSetPaths)) {
            return;
        }

        $this->addToSetCollections(
            $parent,
            $addToSetPaths,
            $addToSetPathCollMap,
            $diffsMap,
            $options
        );
    }
private function insertElements(object $parent, array $collections, array $options) : void
    {
        $pushAllPathCollMap  = [];
        $addToSetPathCollMap = [];
        $pushAllPaths        = [];
        $addToSetPaths       = [];
        $diffsMap            = [];

        foreach ($collections as $coll) {
            $coll->initialize();
            if (! $this->uow->isCollectionScheduledForUpdate($coll)) {
                continue;
            }
            $insertDiff = $coll->getInsertDiff();

            if (empty($insertDiff)) {
                continue;
            }

            $mapping  = $coll->getMapping();
            $strategy = $mapping['strategy'];

            [$propertyPath ]         = $this->getPathAndParent($coll);
            $diffsMap[$propertyPath] = $insertDiff;

            switch ($strategy) {
                case ClassMetadata::STORAGE_STRATEGY_PUSH_ALL:
                    $pushAllPathCollMap[$propertyPath] = $coll;
                    $pushAllPaths[]                    = $propertyPath;
                    break;

                case ClassMetadata::STORAGE_STRATEGY_ADD_TO_SET:
                    $addToSetPathCollMap[$propertyPath] = $coll;
                    $addToSetPaths[]                    = $propertyPath;
                    break;

                default:
                    throw new LogicException('Invalid strategy ' . $strategy . ' given for insertCollections');
            }
        }

        if (! empty($pushAllPaths)) {
            $this->pushAllCollections(
                $parent,
                $pushAllPaths,
                $pushAllPathCollMap,
                $diffsMap,
                $options
            );
        }
        if (empty($addToSetPaths)) {
            return;
        }

        $this->addToSetCollections(
            $parent,
            $addToSetPaths,
            $addToSetPathCollMap,
            $diffsMap,
            $options
        );
    }
private function insertElements ( object $ parent , array $ collections , array $ options ) : void { $ pushAllPathCollMap = [ ] ; $ addToSetPathCollMap = [ ] ; $ pushAllPaths = [ ] ; $ addToSetPaths = [ ] ; $ diffsMap = [ ] ; foreach ( $ collections as $ coll ) { $ coll -> initialize ( ) ; if ( ! $ this -> uow -> isCollectionScheduledForUpdate ( $ coll ) ) { continue ; } $ insertDiff = $ coll -> getInsertDiff ( ) ; if ( empty ( $ insertDiff ) ) { continue ; } $ mapping = $ coll -> getMapping ( ) ; $ strategy = $ mapping [ 'strategy' ] ; [ $ propertyPath ] = $ this -> getPathAndParent ( $ coll ) ; $ diffsMap [ $ propertyPath ] = $ insertDiff ; switch ( $ strategy ) { case ClassMetadata :: STORAGE_STRATEGY_PUSH_ALL : $ pushAllPathCollMap [ $ propertyPath ] = $ coll ; $ pushAllPaths [ ] = $ propertyPath ; break ; case ClassMetadata :: STORAGE_STRATEGY_ADD_TO_SET : $ addToSetPathCollMap [ $ propertyPath ] = $ coll ; $ addToSetPaths [ ] = $ propertyPath ; break ; default : throw new LogicException ( 'Invalid strategy ' . $ strategy . ' given for insertCollections' ) ; } } if ( ! empty ( $ pushAllPaths ) ) { $ this -> pushAllCollections ( $ parent , $ pushAllPaths , $ pushAllPathCollMap , $ diffsMap , $ options ) ; } if ( empty ( $ addToSetPaths ) ) { return ; } $ this -> addToSetCollections ( $ parent , $ addToSetPaths , $ addToSetPathCollMap , $ diffsMap , $ options ) ; }
Inserts new elements for a PersistentCollection instances.

This method is intended to be used with the "pushAll" and "addToSet" strategies.

@param PersistentCollectionInterface[] $collections
@param array                           $options
Inserts new elements for a PersistentCollection instances .