我正在使用Doctrine Filters根据我的API集合GET请求期间提供的查询字符串值来应用过滤器,例如;
/foo?filters[title]=my+search+term
我根据filters[]
中密钥的存在启用标题过滤器,将参数设置为等于查询值;
// Repository Class (within a loop, enabling filters dynamically)
$this
->getEntityManager()
->getFilters()
->enable($filterName)
->setParameter($key, $value);
这将启用按预期运行的过滤器,并设置参数。标题过滤方法如下;
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
if (!$this->hasParameter('title')) {
return '';
}
return sprintf(
'%s.title LIKE %s',
$targetTableAlias,
$this->getParameter('title')
);
}
我想要解决的问题是$this->getParameter()
中%
为LIKE
子句返回的参数的包装。返回的参数在PDO::quote()
中运行,因此字符串连接在此处不起作用(因为这会导致%'my search term'%
而不是'%my search term%'
)。
有没有办法在调用%
时在setParameter()
s中包裹字符串的情况下实现此目的?我宁愿让过滤器对此负责而不是必须针对过滤器配置存储额外的配置,这表明我应该在设置时自己包装参数。
感谢您的帮助!