Skip to content

Commit 87337d2

Browse files
committed
fix: normalizing of deeply nested relations of the same parent
1 parent 6cf3c48 commit 87337d2

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/Drivers/Standard/RelationsResolver.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,10 @@ protected function normalizeRequestedRelations(array $requestedRelations): array
208208

209209
$normalizedNestedRelations = $this->normalizeRequestedRelations([$nestedRelation]);
210210

211-
if (!array_key_exists($parentOfNestedRelation, $normalizedRelations)) {
212-
$normalizedRelations[$parentOfNestedRelation] = $normalizedNestedRelations;
213-
} else {
214-
$normalizedRelations[$parentOfNestedRelation] = array_merge($normalizedRelations[$parentOfNestedRelation], $normalizedNestedRelations);
215-
}
211+
$normalizedRelations[$parentOfNestedRelation] = array_merge_recursive(
212+
Arr::get($normalizedRelations, $parentOfNestedRelation, []),
213+
$normalizedNestedRelations
214+
);
216215
} elseif (!array_key_exists($requestedRelation, $normalizedRelations)) {
217216
$normalizedRelations[$requestedRelation] = [];
218217
}

tests/Unit/Drivers/Standard/RelationsResolverTest.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ public function guarding_entity_nested_relations()
8383

8484
$team = new Team(['name' => 'test team']);
8585
$team->setRelation('users', collect([new User(['name' => 'team user'])]));
86+
$team->setRelation('company', new Company(['name' => 'test company']));
8687

8788
$editor = new User(['name' => 'editor user']);
8889
$editor->setRelation('team', $team);
@@ -92,13 +93,14 @@ public function guarding_entity_nested_relations()
9293
'editors' => collect([$editor])
9394
]);
9495

95-
$relationsResolver = new RelationsResolver(['user', 'editors.team'], []);
96-
$guardedPost = $relationsResolver->guardRelations($post, ['user', 'editors.team']);
96+
$relationsResolver = new RelationsResolver(['user', 'editors.team.users', 'editors.team.company'], []);
97+
$guardedPost = $relationsResolver->guardRelations($post, ['user', 'editors.team.users', 'editors.team.company']);
9798

9899
self::assertArrayHasKey('user', $guardedPost->getRelations());
99100
self::assertArrayHasKey('editors', $guardedPost->getRelations());
100101
self::assertArrayHasKey('team', $guardedPost->getRelation('editors')->first()->getRelations());
101-
self::assertArrayNotHasKey('users', $guardedPost->getRelation('editors')->first()->team->getRelations());
102+
self::assertArrayHasKey('users', $guardedPost->getRelation('editors')->first()->team->getRelations());
103+
self::assertArrayHasKey('company', $guardedPost->getRelation('editors')->first()->team->getRelations());
102104
}
103105

104106
/** @test */

0 commit comments

Comments
 (0)