私はちょうど本当に迷惑なことに出くわしました。私はqueryBuilderを持っています:Doctrineクエリービルダーが間違った結果
$queryBuilder
->select('a')
->addSelect('am')
->addSelect('m')
->addSelect('c')
->addSelect('t')
->leftJoin('a.articleMedias', 'am')
->leftJoin('am.media', 'm')
->leftJoin('a.categories', 'c')
->leftJoin('a.translations', 't')
->add('where', $queryBuilder->expr()->in('a.site', $ids))
;
私は192のオブジェクトを取得します。 問題は、SQLをダンプしてdbに直接実行すると、529個のオブジェクトが取得されることです。しかし、それは同じクエリです!
誰かが2つの結果の間にこのギャップの原因を知っていますか?
EDIT:何かを見つけました。私はカウントのクエリを行うとき、私は203の結果を得るが、私は正常なものを行い、結果をカウントすると、私は192の結果を得る。それは教義が最大のヴァルスか何かを持っているということですか?
EDIT 2:私のアプリケーション固有の継承問題のようです。私を助けてくれてありがとう。
は? –
それが原因leftJoinsのです。あなたは、DBのクエリをよく見ると結果には、結合された内容が異なる間に 'a'を含む行が複数回存在することがわかります。ネイティブSQLクエリに' GROUP BY a.id'を追加してみてください(これは多くのデータを排除しますが、aからの各エントリは1回だけ表示されるため、結果は192になります)。 – Joe
お返事ありがとうございます。私は何かにつながるかもしれない何かを見つけました。私はSQLのcount()クエリを行うとき、私は203の結果を取得します。しかし、私はgetResult()とphp count()を実行すると、私は192を取得します。それは本当に奇妙で、私は実際に失われています。 –