2011-10-10 6 views
5

La mia domanda è doctirne 2. Ho un campo di stato gli utenti, privati ​​o pubblici . Voglio essere in grado di eseguire questa query e potrai vedere tutti i commenti cui status = pubblica e privata solo se userid = corrente registra nel id utente (che so, $ loggerUserVarID)doctrine 2 - query condizionali del generatore di query ... Se le istruzioni?

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

al momento , sto usando un'istruzione if dopo che ho ottenuto i risultati, c'è un modo per fare un'istruzione if all'interno di questa query?

+0

cosa è irritante: un commento ha una proprietà utenti - significa che più utenti sono mappati a un commento? Come va al lavoro? Un commento può avere solo un proprietario (utente)? – Max

risposta

8

Quindi, si vuole tornare commenti "Se lo stato è 'pubblico' o l'ownerid è di $ loggedUserVarID", giusto?

Nota che se $ loggedUserVarID corrisponde al proprietario, non ti interessa davvero lo stato.

Controlla i file di querybuilder e dql. Spiegano piuttosto chiaramente come mettere insieme le condizioni complessive.

Che probabilmente si desidera è qualcosa di simile:

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