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
@@ -81,8 +82,9 @@ public function getItem(string $resourceClass, $id, string $operationName = null
81
82
82
83
$ queryBuilder = $ repository ->createQueryBuilder ('o ' );
83
84
$ queryNameGenerator = new QueryNameGenerator ();
85
+ $ doctrineClassMetadata = $ manager ->getClassMetadata ($ resourceClass );
84
86
85
- $ this ->addWhereForIdentifiers ($ identifiers , $ queryBuilder );
87
+ $ this ->addWhereForIdentifiers ($ identifiers , $ queryBuilder, $ doctrineClassMetadata );
86
88
87
89
foreach ($ this ->itemExtensions as $ extension ) {
88
90
$ extension ->applyToItem ($ queryBuilder , $ queryNameGenerator , $ resourceClass , $ identifiers , $ operationName , $ context );
@@ -98,10 +100,11 @@ public function getItem(string $resourceClass, $id, string $operationName = null
98
100
/**
99
101
* Add WHERE conditions to the query for one or more identifiers (simple or composite).
100
102
*
101
- * @param array $identifiers
102
- * @param QueryBuilder $queryBuilder
103
+ * @param array $identifiers
104
+ * @param QueryBuilder $queryBuilder
105
+ * @param ClassMetadata $classMetadata
103
106
*/
104
- private function addWhereForIdentifiers (array $ identifiers , QueryBuilder $ queryBuilder )
107
+ private function addWhereForIdentifiers (array $ identifiers , QueryBuilder $ queryBuilder, ClassMetadata $ classMetadata )
105
108
{
106
109
foreach ($ identifiers as $ identifier => $ value ) {
107
110
$ placeholder = ':id_ ' .$ identifier ;
@@ -112,7 +115,7 @@ private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryB
112
115
113
116
$ queryBuilder ->andWhere ($ expression );
114
117
115
- $ queryBuilder ->setParameter ($ placeholder , $ value );
118
+ $ queryBuilder ->setParameter ($ placeholder , $ value, $ classMetadata -> getTypeOfField ( $ identifier ) );
116
119
}
117
120
}
118
121
}
0 commit comments