Skip to content

Commit efd85e5

Browse files
committed
Merge branch '2.1'
2 parents 4399446 + f639308 commit efd85e5

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

@@ -83,8 +84,9 @@ public function getItem(string $resourceClass, $id, string $operationName = null
8384

8485
$queryBuilder = $repository->createQueryBuilder('o');
8586
$queryNameGenerator = new QueryNameGenerator();
87+
$doctrineClassMetadata = $manager->getClassMetadata($resourceClass);
8688

87-
$this->addWhereForIdentifiers($identifiers, $queryBuilder);
89+
$this->addWhereForIdentifiers($identifiers, $queryBuilder, $doctrineClassMetadata);
8890

8991
foreach ($this->itemExtensions as $extension) {
9092
$extension->applyToItem($queryBuilder, $queryNameGenerator, $resourceClass, $identifiers, $operationName, $context);
@@ -100,10 +102,11 @@ public function getItem(string $resourceClass, $id, string $operationName = null
100102
/**
101103
* Add WHERE conditions to the query for one or more identifiers (simple or composite).
102104
*
103-
* @param array $identifiers
104-
* @param QueryBuilder $queryBuilder
105+
* @param array $identifiers
106+
* @param QueryBuilder $queryBuilder
107+
* @param ClassMetadata $classMetadata
105108
*/
106-
private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryBuilder)
109+
private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryBuilder, ClassMetadata $classMetadata)
107110
{
108111
foreach ($identifiers as $identifier => $value) {
109112
$placeholder = ':id_'.$identifier;
@@ -114,7 +117,7 @@ private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryB
114117

115118
$queryBuilder->andWhere($expression);
116119

117-
$queryBuilder->setParameter($placeholder, $value);
120+
$queryBuilder->setParameter($placeholder, $value, $classMetadata->getTypeOfField($identifier));
118121
}
119122
}
120123
}

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)