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必须返回字符串