Skip to content

Links require same ID type #5269

Description

@nesl247

API Platform version(s) affected: 3.0.7

Description
Links require the same property type when following the example here: https://api-platform.com/docs/core/subresources/#company-employees

If the id type is a string on Company, it will fail if the id is type UUIDv4 for example on Employee. The issue is caused because the type is retrieved from the last identifier in the URL, and not for the particular identifier.

How to reproduce
See the link above.

Possible Solution

--- /dev/null
+++ ../src/Doctrine/Orm/State/LinksHandlerTrait.php
@@ -118,6 +118,9 @@
$queryBuilder->join("{$previousAlias}.{$link->getToProperty()}", $joinAlias);
foreach ($identifierProperties as $identifierProperty) {
+ $associationTargetClass = $doctrineClassMetadata->getAssociationMapping($link->getToProperty())['targetEntity'];
+ $doctrineClassMetadata = $manager->getClassMetadata($associationTargetClass);
+
$placeholder = $queryNameGenerator->generateParameterName($identifierProperty);
$queryBuilder->andWhere("$joinAlias.$identifierProperty = :$placeholder");
$queryBuilder->setParameter($placeholder, $this->getIdentifierValue($identifiers, $hasCompositeIdentifiers ? $identifierProperty : null), $doctrineClassMetadata->getTypeOfField($identifierProperty));

Additional Context
I didn't submit this as a PR as I'm not sure if there is more to the code that maybe we need to change, but this did solve our issue.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions