2016-04-28 9 views
0

Ich habe ein Repository mit vielen Funktionen wie folgt aus:Symfony | Externalisieren „where“ in einem Querybuilder

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

Aber ich habe diesen Teil viele andere Funktionen nutzen:

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

Und so etwas wie:

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

Ist es möglich? Sorry, wenn es existiert, schaue ich in der QueryBuilder-Dokumentation nach, aber ich finde keinen Weg, dies zu tun.

TY

Antwort

1

Ich denke, Filtering Kollektionen ist das, was Sie suchen. Schauen Sie sich dieses Beispiel aus dem 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); 

ich auch this answer finden, die Ihnen helfen.

+0

TY Stephan, Merkmale sind erstaunlich :) – Aximem

0

Kriterien sind erstaunlich, TY es macht den Job. Um anderen zu helfen, das ist, wie ich es tun:

$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()); 

Und:

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

oder Benutzer -> addCriteria ($ this-> addCriteriaCommentNotDeleted()); einfach besser – Aximem