public function getUpdateQuery($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(); } } $id = $this->classMetadata->getIdValue($object); $query = 'MATCH (n) WHERE id(n) = {id} SET n += {props}'; if (!empty($extraLabels)) { foreach ($extraLabels as $label) { $query .= ' SET n:' . $label; } } if (!empty($removeLabels)) { foreach ($removeLabels as $label) { $query .= ' REMOVE n:' . $label; } } return Statement::create($query, ['id' => $id, 'props' => $propertyValues]); }