0

私はsymfony 5、doctrine 2およびphp 7.3を持っています

4 つのエンティティ :

  1. 1 つの Meeting を含む OrderworkMeeting
  2. 複数の MeetingUser を含む会議、
  3. 1 人のユーザーと 1 つのミーティングを含む MeetingUser (ミーティングとユーザー間の多対多の関係の場合)
  4. ユーザー

OrderworkMeeting リポジトリで特定の 1 人のユーザーとすべての OrederworkMeeting を取得するように要求すると、教義は 1 人のユーザーのみを返し、同じ会議で他のユーザーを表示することは不可能です ???.

この前に特定のユーザーなしでリクエストを複製した場合、それは機能するため、バグだと思います!

コードは次のとおりです。

    $list = $repo_om->getByUser([15]);
    foreach ($list as $oo) {
        var_dump(count($oo->getMeeting()->getUsers()));
    }

戻る 1

    $listForNothing = $repo_om->getByUser();

    $list = $repo_om->getByUser([15]);
    foreach ($list as $oo) {
        var_dump(count($oo->getMeeting()->getUsers()));
    }

戻る 2

そして、私の OrderworkMeetingrepository で:

public function getByUser($userId=0){
    $qb = $this->createQueryBuilder('om');
    $qb ->leftJoin('om.meeting', 'm')
        ->addSelect('m')
        ->leftJoin('m.users', 'mu')
        ->addSelect('mu')
        ->leftJoin('mu.user', 'u')
        ->addSelect('u');

    $this->setQbListLink($qb);
    $this->addQbOtherListLink($qb);

    if($userId){
       $or = $qb->expr()->orX();
       $or->add('u.id IN (:id)');
       $qb->setParameter('id', $userId);
       $qb->andWhere($or);
    }

    ->orderBy('m.date', 'DESC');
    return $qb->getQuery()->getResult();
}

私が理解していない追加は何ですか?あなたの助けは大歓迎です、私はばかだと思います:)

前もって感謝します

編集:

私のプロジェクトで他のテストを行った後、教義クエリが爆発したことがわかりました:

addSelect() あり: 16 クエリ、なし: 84 クエリ。

だから私は本当にクエリを減らすために addSelect が必要です!

addSelect を削除すると問題が解決する理由がわかりません。クエリのaddSelect「マージ」フィールドを読みましたが、これが結果をどのように、そしてなぜ変えるのですか? それはフィールド名から来ましたか?

助けてくれてどうもありがとう

4

0 に答える 0