11

注: これは、プロジェクトの課題トラッカーで報告された ORM の制限です。

階層のルートであるエンティティ クラスでDoctrine 2.3で導入された任意の結合構文を使用してDQLクエリを作成する際に問題に直面しています。

これらのクラスを考えると:

A - 継承なし

B1 - 抽象、階層のルート、識別子列の名前は「タイプ」

次のようにクエリビルダーをセットアップします。

$qb->select('a.id AS idA, b.id AS idB')
    ->from('\Entity\A', 'a')
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something');

そして、生成される SQL Doctrine は次のようなものです。

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3')

問題は、 where が左結合を役に立たなくすることです。

ディスクリミネーター列の条件を強制的に結合に配置する方法はありますか? 少なくともそれはそれを作るでしょう...

バグレポートに記入する必要がありますか?

4

3 に答える 3

0

このバグはDoctrine 2.4で修正されました

https://github.com/doctrine/doctrine2/issues/2934

于 2013-10-31T13:07:53.697 に答える
-1

これを試して

SELECT a.id, 
       b.id 
FROM   a 
       INNER JOIN b ON ( a.something = b.something ) and b.type IN ( '1', '2', '3' ) 
于 2013-09-25T08:32:55.007 に答える