23
23
use ApiPlatform \Core \Metadata \Property \Factory \PropertyMetadataFactoryInterface ;
24
24
use ApiPlatform \Core \Metadata \Property \Factory \PropertyNameCollectionFactoryInterface ;
25
25
use Doctrine \Common \Persistence \ManagerRegistry ;
26
+ use Doctrine \Common \Persistence \Mapping \ClassMetadata ;
26
27
use Doctrine \ORM \EntityManagerInterface ;
27
28
use Doctrine \ORM \QueryBuilder ;
28
29
@@ -83,8 +84,9 @@ public function getItem(string $resourceClass, $id, string $operationName = null
83
84
84
85
$ queryBuilder = $ repository ->createQueryBuilder ('o ' );
85
86
$ queryNameGenerator = new QueryNameGenerator ();
87
+ $ doctrineClassMetadata = $ manager ->getClassMetadata ($ resourceClass );
86
88
87
- $ this ->addWhereForIdentifiers ($ identifiers , $ queryBuilder );
89
+ $ this ->addWhereForIdentifiers ($ identifiers , $ queryBuilder, $ doctrineClassMetadata );
88
90
89
91
foreach ($ this ->itemExtensions as $ extension ) {
90
92
$ extension ->applyToItem ($ queryBuilder , $ queryNameGenerator , $ resourceClass , $ identifiers , $ operationName , $ context );
@@ -100,10 +102,11 @@ public function getItem(string $resourceClass, $id, string $operationName = null
100
102
/**
101
103
* Add WHERE conditions to the query for one or more identifiers (simple or composite).
102
104
*
103
- * @param array $identifiers
104
- * @param QueryBuilder $queryBuilder
105
+ * @param array $identifiers
106
+ * @param QueryBuilder $queryBuilder
107
+ * @param ClassMetadata $classMetadata
105
108
*/
106
- private function addWhereForIdentifiers (array $ identifiers , QueryBuilder $ queryBuilder )
109
+ private function addWhereForIdentifiers (array $ identifiers , QueryBuilder $ queryBuilder, ClassMetadata $ classMetadata )
107
110
{
108
111
foreach ($ identifiers as $ identifier => $ value ) {
109
112
$ placeholder = ':id_ ' .$ identifier ;
@@ -114,7 +117,7 @@ private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryB
114
117
115
118
$ queryBuilder ->andWhere ($ expression );
116
119
117
- $ queryBuilder ->setParameter ($ placeholder , $ value );
120
+ $ queryBuilder ->setParameter ($ placeholder , $ value, $ classMetadata -> getTypeOfField ( $ identifier ) );
118
121
}
119
122
}
120
123
}
0 commit comments