2017-01-04 2 views

Antwort

2

einfach einen DQL oder QueryBuilder verwenden überprüfen.

$repository 
    ->createQueryBuilder('s') 
    ->where('s.selectOption = :selectOption') 
    ->andWhere('s.center_type_id <> :center_type_id') 
    ->setParameters([ 
     'selectOption' => true 
     'center_type_id' => 9, 
    ]) 
    ->getQuery() 
    ->getResult(); 
+0

Ich habe die Lösung mit der gleichen Strategie. wenn es anders geht.? –

+0

Andere Möglichkeiten sind 1) Lazy/Eager Laden mit manuellen Traversal und Filter oder 2) mit einer nativen Abfragen. Beide Methoden haben offensichtliche Nachteile. DQL/QueryBuilder oder Criteria API ist Ihre Wahl. – Timurib

3

sollten Sie in der Lage sein, das zu erreichen, indem Criteria Klasse. So etwas sollte funktionieren:

use Doctrine\Common\Collections\Criteria; 

$criteria = Criteria::create(); 

$criteria->where($criteria->expr()->neq('center_type_id', 9)); 
$criteria->andWhere($criteria->expr()->eq('selectOption', true)); 

$entityRepository = $this->getDoctrine()->getRepository('C2EducateToolsBundle:Stores'); 

$result = $entityRepository->matching($criteria); 

HINWEIS: oben funktioniert, wenn Sie in der Klasse sind, die Symfony\Bundle\FrameworkBundle\Controller\Controller erweitert, da es getDoctrine Methode verwendet. Wenn Sie nicht in einer solchen Klasse sind, sollten Sie entweder EntityManager injizieren oder aus dem Servicebehälter holen.

Für weitere Informationen sollten Sie this answer

+0

'Doctrine \ Common \ Collections \ Criteria' wird mit Doctrine geliefert. Wenn ja, können Sie den Dateipfad teilen, den ich im contoller verwenden muss, wenn nicht doc. –

+0

ja, es ist ein Teil von Doctrine seit Version 2.3, überprüfen Sie meine bearbeitete Antwort, ich habe 'use' Anweisung hinzugefügt –

+0

Kann Ihre Antwort mit Namespace in der Enitity und in Controller aktualisieren. –

Verwandte Themen