Symfony 条令查询缓存和事件侦听器

Symfony 条令查询缓存和事件侦听器,symfony,caching,doctrine-orm,Symfony,Caching,Doctrine Orm,我有一个事件侦听器,以便按用户进行筛选: class UserFilter extends SQLFilter { public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias) { ... return $targetTableAlias.'.createdBy = ' .$this->security_context->getToken()->

我有一个事件侦听器,以便按用户进行筛选:

class UserFilter extends SQLFilter
{   
  public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
  {
    ...
    return $targetTableAlias.'.createdBy = ' .$this->security_context->getToken()->getUser()->getId(); 
  }             
}
这在dev环境中很好,但是在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\u cache\u驱动程序进行注释,我没有这个问题。。。
我认为查询缓存禁用了对过滤器侦听器的调用,我该如何解决它

如果使用查询缓存,将跳过整个sql查询生成过程。您应该做的不是使用过滤器,而是将用户id传递给您的函数,并将其作为参数绑定到查询。这里真正的问题是,您没有将其用作参数,而是用作“字符串”,并且该部分使用查询缓存进行缓存。 如果您还可以将参数作为参数绑定到eventlistener,那么这也可以工作

您可以尝试此处描述的内容,addFilterConstraint必须返回字符串,但您可以设置一些参数以避免缓存问题

也许解决方案是在过滤器内设置一些随机参数,以触发缓存

$this->setParameter('cache', $random);

我使用sqlfilter是为了不将用户id传递给所有函数许多实体、许多函数。。。我不确定您是否可以用sqlfilter绑定参数addFilterConstraint必须返回字符串