0

私は単純なデータモデルを持っています:aProductは多くのTagオブジェクトを持つことができます。

タグモデルには、tagフィールドとvalueフィールドがあり、両方とも文字列です(ここでは値は重要ではありません)。

次のDQLクエリは、すべての製品とそのタグを取得します。

SELECT p, t FROM Product p LEFT JOIN p.tags t

ただし、特定のタグ(「青」など)を持つ製品のみを選択するにはどうすればよいですか?返品された商品のすべてのタグを取得することが重要であるため、単純にを行うことはできませんWHERE t.tag = 'blue'

副次的な質問として; 別のTagテーブルを使用してこれを実装し、ProductTagテーブルでそれらを結び付ける(適切な多対多の関係)方がよいかどうかについて何か考えがありますか?

4

1 に答える 1

1

次のようなDQLクエリを使用できます。

"SELECT p, t FROM Product p LEFT JOIN p.tags t WHERE p.id IN (
    SELECT sp.id FROM Product sp INNER JOIN sp.tags st WHERE st.tag = 'blue'
)"

これにより、タグのコレクションでaが見つかったすべての製品オブジェクトが返さTag.tag = 'blue'れますが、他のタグも結合されます。

私はこれをSymfony2プロジェクトで試しましたが、このように機能しました。Doctrine Documentationからこれに使用されるすべての情報を入手したので、スタンドアロンバージョンでも機能すると思います。

それが機能しない場合は、エラーを教えてください。この問題を詳しく調べます。

于 2012-11-09T22:50:35.523 に答える