public function persistRelationship($entityA, $entityB, RelationshipMetadata $relationship, array &$visited) { if ($entityB instanceof Collection || $entityB instanceof ArrayCollection) { foreach ($entityB as $e) { $aMeta = $this->entityManager->getClassMetadataFor(get_class($entityA)); $bMeta = $this->entityManager->getClassMetadataFor(get_class($entityB)); $type = $relationship->isRelationshipEntity() ? $this->entityManager->getRelationshipEntityMetadata($relationship->getRelationshipEntityClass())->getType() : $relationship->getType(); $hashStr = $aMeta->getIdValue($entityA) . $bMeta->getIdValue($entityB) . $type . $relationship->getDirection(); $hash = md5($hashStr); if (!array_key_exists($hash, $this->relationshipsScheduledForCreated)) { $this->relationshipsScheduledForCreated[] = [$entityA, $relationship, $e, $relationship->getPropertyName()]; } $this->doPersist($e, $visited); } return; } $this->doPersist($entityB, $visited); $this->relationshipsScheduledForCreated[] = [$entityA, $relationship, $entityB, $relationship->getPropertyName()]; }