2016-04-28 70 views
0

我有很多功能像這樣的倉庫:Symfony |外部化「其中」一個QueryBuilder的

$this->createQueryBuilder('q') 
      ->where('q.deleted = :deleted') 
      ->setParameter('deleted', false) 
      ->getQuery() 
      ->getResult(); 

但我有許多其他功能,使用此部分:

->where('q.deleted = :deleted') 
->setParameter('deleted', false) 

,做一些事情,如:

$this->createQueryBuilder('q') 
    ->checkIfDeleted() 
    ... 

這可能嗎?對不起,如果它存在,我檢查QueryBuilder文檔,但我找不到辦法。

TY

回答

1

我猜過濾集合是你在找什麼。看看從Doctrine documentation這個例子:

$group   = $entityManager->find('Group', $groupId); 
$userCollection = $group->getUsers(); 

$criteria = Criteria::create() 
    ->where(Criteria::expr()->eq("birthday", "1982-02-17")) 
    ->orderBy(array("username" => Criteria::ASC)) 
    ->setFirstResult(0) 
    ->setMaxResults(20) 
; 

$birthdayUsers = $userCollection->matching($criteria); 

我還發現this answer這將幫助你。

+0

TY斯蒂芬,指標分析是驚人的:) – Aximem

0

標準是驚人的,TY它完成這項工作。爲了幫助別人,這是我要做的事:

$questionsArray = $this->createQueryBuilder('q') 
     ->getQuery() 
     ->getResult(); 

    $questionsArrayCollection = new ArrayCollection($questionsArray); 
    // I'm force to do this because the querybuilder returns an Array and I need an ArrayCollection, criteria can be used only on collections. 

    return $questionsArrayCollection->matching($this->addCriteriaQuestionNotDeleted()); 

和:

public function addCriteriaQuestionNotDeleted() 
{ 
    return Criteria::create() 
      ->where(Criteria::expr()->eq("deleted", false)); 
} 
+0

或用戶 - > addCriteria($這個 - > addCriteriaCommentNotDeleted() );只是更好 – Aximem