@@ -102,10 +102,12 @@ private function makeFromBoltNode(BoltNode $node): Node
102102 $ properties [$ name ] = $ this ->mapValueToType ($ property );
103103 }
104104
105- /** @var ?string|null $elementId */
106- $ elementId = null ;
107- if ($ node instanceof \Bolt \protocol \v5 \structures \Node) {
108- $ elementId = $ node ->element_id ;
105+ /** @var string|null $elementId */
106+ if (property_exists ($ node , 'element_id ' )) {
107+ $ elementIdValue = $ node ->element_id ?? null ;
108+ $ elementId = is_string ($ elementIdValue ) ? $ elementIdValue : (string ) $ node ->id ;
109+ } else {
110+ $ elementId = (string ) $ node ->id ;
109111 }
110112
111113 /**
@@ -180,9 +182,27 @@ private function makeFromBoltRelationship(BoltRelationship $rel): Relationship
180182 }
181183
182184 /** @var string|null $elementId */
183- $ elementId = null ;
184- if ($ rel instanceof \Bolt \protocol \v5 \structures \Relationship) {
185- $ elementId = $ rel ->element_id ;
185+ if (property_exists ($ rel , 'element_id ' )) {
186+ $ elementIdValue = $ rel ->element_id ?? null ;
187+ $ elementId = is_string ($ elementIdValue ) ? $ elementIdValue : (string ) $ rel ->id ;
188+ } else {
189+ $ elementId = (string ) $ rel ->id ;
190+ }
191+
192+ // For Neo4j 5+, try to get actual element IDs if available
193+ // For Neo4j 4, fallback to string representation of integer IDs
194+ if (property_exists ($ rel , 'startNodeElementId ' )) {
195+ $ startNodeElementIdValue = $ rel ->startNodeElementId ?? null ;
196+ $ startNodeElementId = is_string ($ startNodeElementIdValue ) ? $ startNodeElementIdValue : (string ) $ rel ->startNodeId ;
197+ } else {
198+ $ startNodeElementId = (string ) $ rel ->startNodeId ;
199+ }
200+
201+ if (property_exists ($ rel , 'endNodeElementId ' )) {
202+ $ endNodeElementIdValue = $ rel ->endNodeElementId ?? null ;
203+ $ endNodeElementId = is_string ($ endNodeElementIdValue ) ? $ endNodeElementIdValue : (string ) $ rel ->endNodeId ;
204+ } else {
205+ $ endNodeElementId = (string ) $ rel ->endNodeId ;
186206 }
187207
188208 return new Relationship (
@@ -191,7 +211,9 @@ private function makeFromBoltRelationship(BoltRelationship $rel): Relationship
191211 $ rel ->endNodeId ,
192212 $ rel ->type ,
193213 new CypherMap ($ map ),
194- $ elementId
214+ $ elementId ,
215+ $ startNodeElementId ,
216+ $ endNodeElementId
195217 );
196218 }
197219
@@ -207,9 +229,12 @@ private function makeFromBoltUnboundRelationship(BoltUnboundRelationship $rel):
207229 $ map [$ key ] = $ this ->mapValueToType ($ property );
208230 }
209231
210- $ elementId = null ;
211- if ($ rel instanceof \Bolt \protocol \v5 \structures \UnboundRelationship) {
212- $ elementId = $ rel ->element_id ;
232+ /** @var string|null $elementId */
233+ if (property_exists ($ rel , 'element_id ' )) {
234+ $ elementIdValue = $ rel ->element_id ?? null ;
235+ $ elementId = is_string ($ elementIdValue ) ? $ elementIdValue : (string ) $ rel ->id ;
236+ } else {
237+ $ elementId = (string ) $ rel ->id ;
213238 }
214239
215240 return new UnboundRelationship (
0 commit comments