@@ -105,6 +105,11 @@ private function translateValue($value, HttpMetaInfo $meta): array
105
105
106
106
if (is_array ($ value )) {
107
107
if ($ meta ->getCurrentType () === 'path ' ) {
108
+ /**
109
+ * There are edge cases where multiple paths are wrapped in a list.
110
+ *
111
+ * @see OGMFormatterIntegrationTest::testPathMultiple for an example
112
+ */
108
113
if (is_array ($ value [0 ])) {
109
114
$ tbr = [];
110
115
foreach ($ value as $ path ) {
@@ -147,9 +152,9 @@ private function translateObject(object $value, HttpMetaInfo $meta): array
147
152
148
153
if ($ type === 'node ' ) {
149
154
$ node = $ meta ->currentNode ();
150
- if ($ node && ( array ) $ value === ( array ) $ node ->properties ) {
155
+ if ($ node && json_encode ( $ value, JSON_THROW_ON_ERROR ) === json_encode ( $ node ->properties , JSON_THROW_ON_ERROR ) ) {
151
156
$ meta = $ meta ->incrementMeta ();
152
- [ $ map, $ meta ] = $ this ->translateCypherMap (( array ) $ node ->properties , $ meta );
157
+ $ map = $ this ->translateProperties ( $ node ->properties );
153
158
154
159
return [new Node ((int ) $ node ->id , new CypherList ($ node ->labels ), $ map ), $ meta ];
155
160
}
@@ -158,14 +163,29 @@ private function translateObject(object $value, HttpMetaInfo $meta): array
158
163
return $ this ->translateCypherMap ((array ) $ value , $ meta );
159
164
}
160
165
166
+ private function translateProperties (stdClass $ properties ): CypherMap
167
+ {
168
+ $ tbr = [];
169
+ foreach ((array ) $ properties as $ key => $ value ) {
170
+ if ($ value instanceof stdClass) {
171
+ $ tbr [$ key ] = new CypherMap ((array ) $ value );
172
+ } elseif (is_array ($ value )) {
173
+ $ tbr [$ key ] = new CypherList ($ value );
174
+ } else {
175
+ $ tbr [$ key ] = $ value ;
176
+ }
177
+ }
178
+
179
+ return new CypherMap ($ tbr );
180
+ }
181
+
161
182
/**
162
183
* @param RelationshipArray $relationship
163
184
*/
164
185
private function relationship (stdClass $ relationship , HttpMetaInfo $ meta ): array
165
186
{
166
187
$ meta = $ meta ->incrementMeta ();
167
- /** @var array<string, OGMTypes> $map */
168
- [$ map , $ meta ] = $ this ->translateCypherMap ((array ) $ relationship ->properties , $ meta );
188
+ $ map = $ this ->translateProperties ($ relationship ->properties );
169
189
170
190
$ tbr = new Relationship (
171
191
(int ) $ relationship ->id ,
@@ -225,7 +245,7 @@ private function path(array $value, HttpMetaInfo $meta): Path
225
245
*/
226
246
private function translateNode (array $ node ): Node
227
247
{
228
- return new Node ($ node ['id ' ], new CypherList ($ node ['labels ' ]), $ this ->translateCypherMap ($ node ['properties ' ]));
248
+ return new Node ($ node ['id ' ], new CypherList ($ node ['labels ' ]), $ this ->translateProperties ($ node ['properties ' ]));
229
249
}
230
250
231
251
/**
0 commit comments