20
20
use ApiPlatform \Core \Bridge \Doctrine \Orm \Util \QueryBuilderHelper ;
21
21
use ApiPlatform \Core \Bridge \Doctrine \Orm \Util \QueryNameGeneratorInterface ;
22
22
use ApiPlatform \Core \Exception \InvalidArgumentException ;
23
- use Doctrine \Common \Collections \ArrayCollection ;
24
23
use Doctrine \DBAL \Types \Type as DBALType ;
25
24
use Doctrine \ORM \Query \Parameter ;
26
25
use Doctrine \ORM \QueryBuilder ;
@@ -139,7 +138,6 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
139
138
* The only fix is to provide field type to doctrine ...
140
139
* BUT it is not possible with setParameter(), as third arg can only be
141
140
* \Doctrine\DBAL\Connection::PARAM_STR_ARRAY
142
- *
143
141
* The only way to do this will be to rewrite the IN() statement to multiple values,
144
142
* each provided as a single setParameter()
145
143
*/
@@ -162,11 +160,6 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
162
160
$ args [] = new Parameter ($ valueParameter , $ caseSensitive ? $ values [$ i ] : strtolower ($ values [$ i ]), $ type );
163
161
}
164
162
165
- // setParameters reset current parameters set, so we need to merge with getParameters()
166
- $ parameters = new ArrayCollection ($ args );
167
- foreach ($ queryBuilder ->getParameters () as $ p ) {
168
- $ parameters ->add ($ p );
169
- }
170
163
$ queryBuilder
171
164
->andWhere (sprintf ($ wrapCase ('%s.%s ' ).' IN (%s) ' , $ alias , $ field , implode (', ' , $ inQuery )))
172
165
->setParameters ($ parameters );
@@ -222,10 +215,10 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
222
215
*
223
216
* @throws InvalidArgumentException If strategy does not exist
224
217
*/
225
- protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ alias , string $ field , $ value , bool $ caseSensitive )
218
+ protected function addWhereByStrategy (string $ strategy , QueryBuilder $ queryBuilder , QueryNameGeneratorInterface $ queryNameGenerator , string $ alias , string $ field , $ value , bool $ caseSensitive, ClassMetadata $ metadata = null )
226
219
{
227
220
// check if we have metadata
228
- if (( $ metadata = func_get_arg ( 7 )) instanceof ClassMetadata) {
221
+ if ($ metadata instanceof ClassMetadata) {
229
222
$ type = $ metadata ->getTypeOfField ($ field );
230
223
} else {
231
224
@trigger_error ('addWhereByStrategy() will require argument ClassMetadata in 3.0. ' , E_USER_DEPRECATED );
0 commit comments