2011-10-10 15 views
5

Moje zapytanie to doctirne 2. Mam pole statusu w użytkownikach prywatnych lub publicznych. Chcę móc uruchomić tę kwerendę i wyświetlić wszystkie komentarze gdzie stan = publiczne i prywatne tylko jeśli userid = prąd zalogowany ID użytkownika (co wiem, $ loggerUserVarID)Doctrine 2 - zapytania warunkowe budowniczego zapytania ... Jeśli instrukcje?

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->leftJoin('c.users', 'u') 
      ->where('status = public') ??? display all public comments but private if it belpongs to the logged in user.? 
      ->setParameter(1, $loggerUserVarID) 
      ->getQuery(); 

w tej chwili używam instrukcji if po uzyskaniu wyników, czy istnieje sposób na wykonanie instrukcji if wewnątrz tego zapytania?

+0

Whats irytujące: komentarz ma właściwość użytkowników - czyli wielu użytkowników są odwzorowywane na komentarz? Hows, które idą do pracy? Czy komentarz może mieć tylko jednego właściciela (użytkownika)? – Max

Odpowiedz

8

Tak więc, chcesz zwrócić komentarze "Jeśli status to" public "lub ownerId to $ loggedUserVarID", prawda?

Należy zauważyć, że jeśli $ loggedUserVarID pasuje do właściciela, nie interesuje Cię status.

Zapoznaj się z querybuilder i dql docs. Wyjaśniają one dość wyraźnie, jak zestawić złożone w warunkach.

Co prawdopodobnie chcesz coś jak:

$q = $this->em->createQueryBuilder() 
      ->select('c') 
      ->from('\Entities\Comments', 'c') 
      ->join('c.users', 'u') 
      ->where(
       $qb->expr()->orX(
        $qb->expr()->eq('status','public'), 
        $qb->expr()->eq('u.id',$loggedInUser) 
       ) 
      ) 
     ->setParameter(1, $loggerUserVarID) 
     ->getQuery(); 
Powiązane problemy