public function getCreateQuery($object) { $propertyValues = []; $extraLabels = []; $removeLabels = []; foreach ($this->classMetadata->getPropertiesMetadata() as $field => $meta) { $propertyValues[$field] = $meta->getValue($object); } foreach ($this->classMetadata->getLabeledProperties() as $labeledProperty) { if ($labeledProperty->isLabelSet($object)) { $extraLabels[] = $labeledProperty->getLabelName(); } else { $removeLabels[] = $labeledProperty->getLabelName(); } } $query = sprintf('CREATE (n:%s) SET n += {properties}', $this->classMetadata->getLabel()); if (!empty($extraLabels)) { foreach ($extraLabels as $label) { $query .= ' SET n:' . $label; } } if (!empty($removeLabels)) { foreach ($removeLabels as $label) { $query .= ' REMOVE n:' . $label; } } $query .= ' RETURN id(n) as id'; return Statement::create($query, ['properties' => $propertyValues], spl_object_hash($object)); }