Skip to content

Commit f639308

Browse files
authored
Merge pull request #1503 from k911/2.1
Fix for custom identifier DBAL Type (oracle)
2 parents dc658e5 + ed4c688 commit f639308

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/Bridge/Doctrine/Orm/ItemDataProvider.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface;
2424
use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface;
2525
use Doctrine\Common\Persistence\ManagerRegistry;
26+
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
2627
use Doctrine\ORM\EntityManagerInterface;
2728
use Doctrine\ORM\QueryBuilder;
2829

@@ -81,8 +82,9 @@ public function getItem(string $resourceClass, $id, string $operationName = null
8182

8283
$queryBuilder = $repository->createQueryBuilder('o');
8384
$queryNameGenerator = new QueryNameGenerator();
85+
$doctrineClassMetadata = $manager->getClassMetadata($resourceClass);
8486

85-
$this->addWhereForIdentifiers($identifiers, $queryBuilder);
87+
$this->addWhereForIdentifiers($identifiers, $queryBuilder, $doctrineClassMetadata);
8688

8789
foreach ($this->itemExtensions as $extension) {
8890
$extension->applyToItem($queryBuilder, $queryNameGenerator, $resourceClass, $identifiers, $operationName, $context);
@@ -98,10 +100,11 @@ public function getItem(string $resourceClass, $id, string $operationName = null
98100
/**
99101
* Add WHERE conditions to the query for one or more identifiers (simple or composite).
100102
*
101-
* @param array $identifiers
102-
* @param QueryBuilder $queryBuilder
103+
* @param array $identifiers
104+
* @param QueryBuilder $queryBuilder
105+
* @param ClassMetadata $classMetadata
103106
*/
104-
private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryBuilder)
107+
private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryBuilder, ClassMetadata $classMetadata)
105108
{
106109
foreach ($identifiers as $identifier => $value) {
107110
$placeholder = ':id_'.$identifier;
@@ -112,7 +115,7 @@ private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryB
112115

113116
$queryBuilder->andWhere($expression);
114117

115-
$queryBuilder->setParameter($placeholder, $value);
118+
$queryBuilder->setParameter($placeholder, $value, $classMetadata->getTypeOfField($identifier));
116119
}
117120
}
118121
}

tests/Bridge/Doctrine/Orm/ItemDataProviderTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function testGetItemSingleIdentifier()
5858
$queryBuilderProphecy->getQuery()->willReturn($queryProphecy->reveal())->shouldBeCalled();
5959
$queryBuilderProphecy->expr()->willReturn($exprProphecy->reveal())->shouldBeCalled();
6060
$queryBuilderProphecy->andWhere($comparison)->shouldBeCalled();
61-
$queryBuilderProphecy->setParameter(':id_id', 1)->shouldBeCalled();
61+
$queryBuilderProphecy->setParameter(':id_id', 1, DBALType::INTEGER)->shouldBeCalled();
6262

6363
$queryBuilder = $queryBuilderProphecy->reveal();
6464

@@ -96,8 +96,8 @@ public function testGetItemDoubleIdentifier()
9696
$queryBuilderProphecy->expr()->willReturn($exprProphecy->reveal())->shouldBeCalled();
9797
$queryBuilderProphecy->andWhere($comparison)->shouldBeCalled();
9898

99-
$queryBuilderProphecy->setParameter(':id_ida', 1)->shouldBeCalled();
100-
$queryBuilderProphecy->setParameter(':id_idb', 2)->shouldBeCalled();
99+
$queryBuilderProphecy->setParameter(':id_ida', 1, DBALType::INTEGER)->shouldBeCalled();
100+
$queryBuilderProphecy->setParameter(':id_idb', 2, DBALType::INTEGER)->shouldBeCalled();
101101

102102
$queryBuilder = $queryBuilderProphecy->reveal();
103103

@@ -155,7 +155,7 @@ public function testQueryResultExtension()
155155
$queryBuilderProphecy = $this->prophesize(QueryBuilder::class);
156156
$queryBuilderProphecy->expr()->willReturn($exprProphecy->reveal())->shouldBeCalled();
157157
$queryBuilderProphecy->andWhere($comparison)->shouldBeCalled();
158-
$queryBuilderProphecy->setParameter(':id_id', 1)->shouldBeCalled();
158+
$queryBuilderProphecy->setParameter(':id_id', 1, DBALType::INTEGER)->shouldBeCalled();
159159

160160
$queryBuilder = $queryBuilderProphecy->reveal();
161161

0 commit comments

Comments
 (0)