我使用了doctrine过滤器,最近注意到过滤器不适用于删除语句。我试图通过文档和谷歌挖掘,但神秘感仍然没有解决。
例如,我有过滤器将用户连接到公司,因此每个选择查询都像:
$userRepo->find(12);
并从
修改SELECT .... FROM user t0 WHERE t0.id = 12
进入
很酷,这就是我需要的。SELECT .... FROM user t0 WHERE t0.id = 12 AND(t0.company_id ='6')
困扰我的是删除语句似乎没有受到影响。有谁知道它是默认的doctrine架构还是我的配置错了?
过滤器
use Doctrine\ORM\Mapping\ClassMetaData;
use Doctrine\ORM\Query\Filter\SQLFilter;
use Doctrine\Common\Annotations\Reader;
class CompanyAware extends SQLFilter
{
/**
* @var Reader
*/
protected $reader;
/**
* @param ClassMetaData $targetEntity
* @param string $targetTableAlias
*
* @return string
*/
public function addFilterConstraint(ClassMetadata $targetEntity, $targetTableAlias)
{
$query = '';
$ann = 'Mrok\\PortalBundle\\Annotation\\CompanyAware';
$isAware = $this->reader->getClassAnnotation($targetEntity->getReflectionClass(), $ann);
if ($isAware) {
$id = $this->getParameter('id');
$query = sprintf('%s.company_id = %s', $targetTableAlias, $id);
}
return $query;
}
public function setAnnotationReader(Reader $reader)
{
$this->reader = $reader;
}
}