Doctrine2是否应用过滤器来删除语句

时间:2015-05-24 23:57:28

标签: php symfony doctrine-orm

我使用了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;
    }
}

0 个答案:

没有答案