1

同様の質問が存在しますが、サイレント結合テーブルの問題について言及しているものはありませんでした。

結合を含む単純な SQL クエリがありますが、この結合テーブルが原因で DQL に変換できません。ManyToMany アソシエーションによってリンクされたShop と Clientの2 つのエンティティがあります。

Doctrine2 は静かに結合テーブルを作成しました: shop_client.

今、特定のショップに属していないすべてのクライアントを取得したい場合は、次のようにします。

SELECT c.name FROM `client` AS c
JOIN `shop_client` AS sc
    ON sc.client_id = c.id
    AND sc.shop_id != :shop_id

これは簡単で、本当に簡単ですが、DQL バージョンを思いつくことができません。

「EXISTS」、「NOT IN」、「SIZE」を使用しようとしましたが、DQL クエリが機能することはありませんでした。

編集: My Shop エンティティにはclientsフィールドがありますが、Client エンティティにはshopsフィールドがありません。

4

1 に答える 1

1
SELECT
    c
FROM
    Client c
WHERE
    c.id IN (
        SELECT
            c2.id
        FROM
            Shop s2
        JOIN
            s2.clients c2
        WHERE
            s2.id != :shopId
    )

また、エンティティ定義なしでそのようなクエリを作成することは、暗闇での射撃に似ていることを考慮してください。次回は質問とともに投稿してください。

于 2013-02-05T14:15:50.697 に答える