2011-10-10 8 views
5

내 쿼리는 doctirne입니다. 2. 사용자의 상태 필드가 private이거나 공개입니다. 나는 순간에 모든 댓글 공공 및 민간 상태 = 사용자 ID = 전류가 사용자 ID로 로그인 한 경우에만 (내가 아는 한, $ loggerUserVarID)doctrine 2 - 쿼리 빌더 조건부 쿼리 ... if 문?

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

를이 쿼리를 실행하고 표시 할 수 있도록하려면 , 나는 결과를 얻은 후에 if 문을 사용하고 있는데,이 쿼리 내에서 if 문을 수행하는 방법이 있습니까?

+0

가 뭐죠 자극 :

뭔가처럼 당신이 아마 원하는입니까? 그 일이 어떻게 될까요? 주석을 단 하나의 소유자 (사용자)가 있습니까? – Max

답변

8

그래서 "돌아 가기를 원합니다. 상태가 'public'이거나 ownerId가 $ loggedUserVarID 인 경우, 맞습니까?

$ loggedUserVarID가 소유자와 일치하면 상태에 별 관심이 없습니다.

querybuilder 및 dql 문서를 확인하십시오. 복잡한 조건을 어떻게 조합 할 것인가를 아주 분명하게 설명합니다. 여러 사용자가 코멘트에 매핑되는 의미 - 코멘트가 사용자 속성이 있습니다 :

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