Skip to content

Commit 3f09650

Browse files
committed
fix
1 parent bb3250a commit 3f09650

File tree

2 files changed

+14
-21
lines changed

2 files changed

+14
-21
lines changed

src/Resolver/StoryResolver.php

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,30 @@ public function resolve(array $target, array $relations): array
3131
$relationMap[$relation['uuid']] = $relation;
3232
}
3333

34-
return $this->doResolve($target, $relationMap, []);
34+
35+
// Resolve relations within the relation map first
36+
$this->doResolve($relationMap, $relationMap);
37+
38+
// Then resolve relations in the main target
39+
$this->doResolve($target, $relationMap);
40+
41+
return $target;
3542
}
3643

37-
private function doResolve(array $target, array $relationMap, array $seen): array
44+
private function doResolve(array &$target, array &$relationMap): void
3845
{
39-
foreach ($target as $key => $value) {
46+
foreach ($target as $key => &$value) {
4047
if ('uuid' === $key) {
4148
continue;
4249
}
4350

4451
if (\is_string($value) && isset($relationMap[$value])) {
45-
if (\in_array($value, $seen, true)) {
46-
continue;
47-
}
48-
49-
$seen[] = $value;
50-
$target[$key] = $this->doResolve($relationMap[$value], $relationMap, $seen);
52+
$value = $relationMap[$value];
5153
} elseif (\is_array($value) && isset($value['id'], $relationMap[$value['id']])) {
52-
$id = $value['id'];
53-
54-
if (\in_array($id, $seen, true)) {
55-
continue;
56-
}
57-
58-
$seen[] = $id;
59-
$target[$key] = $this->doResolve($relationMap[$id], $relationMap, $seen);
54+
$value = $relationMap[$value['id']];
6055
} elseif (\is_array($value)) {
61-
$target[$key] = $this->doResolve($value, $relationMap, $seen);
56+
$this->doResolve($value, $relationMap);
6257
}
6358
}
64-
65-
return $target;
6659
}
6760
}

tests/Unit/Resolver/StoryResolverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ public function resolveWithManyNestedRels(): void
245245

246246
$references = [
247247
$a = [
248-
'uuid' => $aUuid = $faker->uuid,
248+
'uuid' => $aUuid = $faker->uuid(),
249249
'name' => $faker->word(),
250250
],
251251
$b = [

0 commit comments

Comments
 (0)