public function traverseRelationshipEntities($entity, array &$visited = [])
{
$classMetadata = $this->entityManager->getClassMetadataFor(get_class($entity));
foreach ($classMetadata->getRelationshipEntities() as $relationshipMetadata) {
$value = $relationshipMetadata->getValue($entity);
if (null === $value || $relationshipMetadata->isCollection() && count($value) === 0) {
continue;
}
if ($relationshipMetadata->isCollection()) {
foreach ($value as $v) {
$this->persistRelationshipEntity($v, get_class($entity));
$rem = $this->entityManager->getRelationshipEntityMetadata(get_class($v));
$toPersistProperty = $rem->getStartNode() === $classMetadata->getClassName() ? $rem->getEndNodeValue($v) : $rem->getStartNodeValue($v);
$this->doPersist($toPersistProperty, $visited);
}
} else {
$this->persistRelationshipEntity($value, get_class($entity));
$rem = $this->entityManager->getRelationshipEntityMetadata(get_class($value));
$toPersistProperty = $rem->getStartNode() === $classMetadata->getClassName() ? $rem->getEndNodeValue($value) : $rem->getStartNodeValue($value);
$this->doPersist($toPersistProperty, $visited);
}
}
}