我有一个事件监听器,以便按用户进行过滤:
class UserFilter extends SQLFilter
{
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
...
return $targetTableAlias.'.createdBy = ' .$this->security_context->getToken()->getUser()->getId();
}
}
它在开发环境中很好,但是除了第一次调用之外,没有在prod环境中调用过滤器
在config_prod.yml
中,我有:
doctrine:
orm:
metadata_cache_driver:
type: memcache
host: localhost
port: 11211
instance_class: Memcache
query_cache_driver:
type: memcache
host: localhost
port: 11211
instance_class: Memcache
如果我发表评论query_cache_driver
,我就没有这个问题......
我认为query_cache
禁用对过滤器监听器的调用,我该如何解决?
答案 0 :(得分:0)
如果使用查询缓存,则会跳过整个sql查询构建过程。你应该做的不是使用过滤器,而是将用户id传递给你的函数,并将它作为参数绑定到查询。这里真正的问题是你没有将它用作参数,而是用作'string',并且该部分用查询缓存进行缓存。 如果你也可以在eventlistener中将参数绑定为参数,那么它也可以工作。
您可以尝试使用here
描述的内容答案 1 :(得分:0)
此处addFilterConstraint
必须返回字符串,但您可以设置一些参数以避免缓存问题。
也许解决方法是在过滤器内部设置一些随机参数来触发缓存。
$this->setParameter('cache', $random);