2

列のある3つのテーブルがあります

A:
    id
B:
    id
    a_id
C:
    id
    b.id

ネイティブ クエリの場合:

SELECT a.id, b.id, c.id
FROM A as a 
LEFT JOIN B as b 
    INNER JOIN C as c ON b.id = c.b_id
ON a.id = b.a_id

私が試してみました

SELECT a.id, b.id, c.id 
    FROM App\HomeBundle\Entity\A as a
    LEFT JOIN App\HomeBundle\Entity\B as b
        INNER JOIN App\HomeBundle\Entity\C as c
        ON c.id = c.bId
    ON a.id = b.aId

エラーが発生しました:

Error: Expected Literal, got 'JOIN' 

ネイティブ クエリを DQL またはクエリ ビルダーに変換することはできますか? 可能であれば、どのように見えますか?

4

3 に答える 3

1

これは単なる推測ですが、コメントするには長すぎます。私が完全にベースから外れている場合は、この回答を削除します。

ネイティブ クエリが構文的に正しいと仮定すると、おそらく MySQL は最後のON条件をINNER JOINbetweenbとの結果に適用していcます。それが本当なら、これで同じ結果が得られるかどうかを確認してください。

SELECT a.id, b.id, c.id 
FROM App\HomeBundle\Entity\A as a
LEFT JOIN (
    SELECT bx.aID
    FROM   App\HomeBundle\Entity\B as bx
    INNER JOIN App\HomeBundle\Entity\C as c
    ON    bx.id = c.bId
    ) b
ON a.id = b.aId

あなたの試みた解決策(あなたが言った場所ON c.id = c.bId)のエラーと思われるものを修正したことに注意してください。

于 2013-04-02T13:05:37.140 に答える
0

これは古い質問ですが、エンティティではなく関係に参加する必要があると思います。

たとえば、代わりに

SELECT a
    FROM Entity\A as a
    LEFT JOIN Entity\B as b

そのはず:

SELECT a
    FROM Entity\A as a
    LEFT JOIN a.entityB as b

それが明確でない場合、a.entityB は「entityB」と呼ばれる A エンティティのプロパティです。そのプロパティは、A と B の間の関係を定義します。

エンティティをエンティティに結合するだけでは、Doctrine はそれらがどのように関連しているかを知りません。ただし、プロパティに基づいて JOIN すると、Doctrine はアノテーション (または他のマッピング) を使用して A と B の関係を判断できます。

于 2013-10-04T15:19:43.367 に答える
0

doctrine を使用するときの代わりに、常にWITHキーワードを使用する必要がありました。ON

于 2014-11-24T02:15:26.297 に答える