From 2c7a646b5cded89129b3cdbbbdea26b6a98cb320 Mon Sep 17 00:00:00 2001 From: Sebastian Breuers Date: Tue, 17 Feb 2026 11:21:33 +0100 Subject: [PATCH] fix: identify already tracked resources by ID AND type currently entities with same ID are skipped since different entities can have the same ID. --- src/JsonApi/Serializer/ItemNormalizer.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/JsonApi/Serializer/ItemNormalizer.php b/src/JsonApi/Serializer/ItemNormalizer.php index 3ecb096b0f..76e7dc0607 100644 --- a/src/JsonApi/Serializer/ItemNormalizer.php +++ b/src/JsonApi/Serializer/ItemNormalizer.php @@ -551,10 +551,19 @@ private function getRelatedResources(object $object, ?string $format, array $con */ private function addIncluded(array $data, array &$included, array &$context): void { - if (isset($data['id']) && !\in_array($data['id'], $context['api_included_resources'], true)) { + if (!isset($data['id'], $data['type'])) { + return; + } + + $iriLike = $data['type'] . ':' . $data['id']; + + // Initialize tracking array if needed + $context['api_included_resources'] ??= []; + + if (!\in_array($iriLike, $context['api_included_resources'], true)) { $included[] = $data; // Track already included resources - $context['api_included_resources'][] = $data['id']; + $context['api_included_resources'][] = $iriLike; } }