2011-10-10 31 views
5

私のクエリはdoctirneです。私はユーザにプライベートまたは のステータスフィールドを持っています。私は、現時点ではすべてのコメントパブリックとプライベートステータスは=ユーザー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

いただきまし刺激性:コメントは、ユーザーのプロパティを持っている - 複数のユーザーがコメントにマップされていることを意味?それはうまくいくのでしょうか?コメントは1人の所有者(ユーザー)がいるだけですか? – Max

答えて

8

したがって、返信したいと思います。ステータスが 'public'またはownerIdが$ loggedUserVarIDの場合は、正しく表示されますか?

$ loggedUserVarIDが所有者と一致する場合、あなたは本当にステータスを気にしません。

querybuilderとdql docsを確認してください。彼らは条件をどこで複雑にするかをかなり明確に説明しています。

あなたはおそらくしたいことのようなものです:

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