6

私のクエリは doctirne 2 です。ユーザーには、プライベートまたはパブリックのステータス フィールドがあります。このクエリを実行して、status= public および private であるすべてのコメントを表示できるようにしたいのは、userid = 現在ログインしているユーザー ID (私が知っている、$loggerUserVarID) の場合のみです。

  $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 ステートメントを実行する方法はありますか?

4

1 に答える 1

9

それで、「ステータスが 'public' の場合、または ownerId が $loggedUserVarID の場合」というコメントを返したいと思いませんか?

$loggedUserVarID が所有者と一致する場合、ステータスはあまり気にしないことに注意してください。

querybuilder と dql のドキュメントを確認してください。複雑な where 条件をまとめる方法をかなり明確に説明しています。

おそらくあなたが望むのは次のようなものです:

$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();
于 2011-10-11T02:14:03.530 に答える