2016-07-15 52 views
1

我已经编写了一个BasicRepository类,以便使用它来代替EntityRepository来添加一些基本修改,如删除所有已删除的Flage项目。Extend Doctrine EntityRepository

<?php 

namespace AppBundle\Repository; 

use AppBundle\DataFixtures\ORM\LoadEventPrioData; 
use AppBundle\Entity\Location; 
use Doctrine\ORM\EntityRepository; 

class BasicRepository extends EntityRepository 
{ 
    public function createQueryBuilder($alias, $indexBy = null) 
    { 
     $query = parent::createQueryBuilder($alias); 

     dump(parent::getClassName()); 
     dump($this->getClassName()); 

     if (property_exists($this->getClassName(), 'isDeleted')) { 
      dump("Ping"); 
      $query->andWhere($alias.'.isDeleted = :false')->setParameter('false', false); 
     } 
     else { 
      dump("Pong"); 
     } 
     return $query; 
    } 
} 

控制器:

... 
public function searchAction(Request $request) { 
     $em = $this->getDoctrine()->getManager(); 
     $meta = new ClassMetadata('AppBundle:Location'); 
     $er = new BasicRepository($em, $meta); 
     $query = $er->createQueryBuilder('u'); 

     ... 

我的目标是 - 如果属性“请将isDeleted”(布尔)在实体存在 - 查询应该包含一个额外凡结单。

由于一些奇怪的原因,property_exists总是返回false - 即使属性在类中退出时也是如此。

回答

0

我明白你的意思。您正在寻找的正确位置是Doctrine Filters。检查这个包:https://github.com/DeprecatedPackages/DoctrineFilters#usage

在那里,你可以用你的使用情况正好找到例如:

<?php 

use Doctrine\ORM\Mapping\ClassMetadata; 
use Symplify\DoctrineFilters\Contract\Filter\FilterInterface; 

final class SoftdeletableFilter implements FilterInterface 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function addFilterConstraint(ClassMetadata $entity, $alias) 
    { 
     if ($entity->getReflectionClass()->hasProperty('isDeleted')) { 
      return "$alias.isDeleted = 0"; 
     } 

     return ''; 
    } 

} 
+1

谢谢你 - 你给我正确的提示... – Atreides78

+0

我很高兴提供帮助! –