api-platform / api-platform/core
Links require same ID type
- Dominant language
- PHP
- Stars
- 2.6k
- Forks
- 980
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 51
Description
**API Platform version(s) affected**: 3.0.7
**Description**
`Link`s 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.
Contributor guide
Assessment
This issue has not been assessed yet.