6

Doctrine 2に問題があり、仕事を始めようとしているメイトマニーの関係に左結合します。おそらく私のクエリビルダーですが、理解できないようです。

私は次のような結合テーブルを持っています:

----------------------------------
| user_id    |   attraction_id   |
----------------------------------
| 4              1               |
| 4              2               |
| 4              3               |
----------------------------------

ユーザーとアトラクションの2つのモデルの場合、ユーザーはリレーションシップの所有者です。

このクエリを実行すると:

$attractions = $CI->em->createQueryBuilder()
        ->select('a', 'u')
        ->from('\ListLovers\Model\Attraction', 'a')
        ->leftJoin('a.users', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'u.id = 4')
->getQuery()->getResult();

IDが1のアトラクションのユーザー数は1です。すばらしいです。

ここで、次のように結合テーブルに別の行を追加すると、次のようになります。

----------------------------------
| user_id    |   attraction_id   |
----------------------------------
| 1              1               |
| 4              1               |
| 4              2               |
| 4              3               |
----------------------------------

...そして同じクエリを実行すると、IDが1のアトラクションのユーザー数は...ZEROになります。なに?

私は何かが足りないのですか?

ありがとう、マーク。

4

2 に答える 2

6

多対多の最良の方法はまたはMEMBER OFですNOT MEMBER OF

$attractions = $CI->em->createQueryBuilder()
        ->select('a', 'u')
        ->from('\ListLovers\Model\Attraction', 'a')
        ->where(':uid MEMBER OF a.users')
        ->setParameter('uid', 4)
        ->getQuery()->getResult();
于 2015-06-09T15:14:18.047 に答える
0

この方法で試してみるとどうなりますか:

        $attractions = $CI->em->createQueryBuilder()
                        ->from('\ListLovers\Model\Attraction', 'a')
                        ->addSelect('a')
                        ->leftJoin('a.users', 'u')
                        ->addSelect('u')
                        ->where('u.id = :uid')
                        ->setParameter('uid', 4)
                    ->getQuery()
                    ->getResult();
于 2014-03-21T13:50:46.593 に答える