私はSymfony2とDoctrine2で小さなウェブサイトを構築しています。ブログ投稿、イベント、プレスリリースがあります。これらはどれも非常に似ているため、「ノード」という親テーブルで単一テーブル継承(STI)を使用することにしました。
ノードには次のものがあります。
- ブール値である「公開済み」フィールド
- 「ロケール」フィールド。これは文字列であり、「これはこのロケールでのみ表示されます」と表示されます。(ロケールはリクエストを介して渡されます)。
デフォルトでは、現在のロケールからの公開済みノードのみを表示したいと思います。
明らかに、次のような多くのクエリをリポジトリに作成できます。
$this->createQueryBuilder('Event')
->where('Node.published = 1')
->where('Node.locale = :locale')
しかし、これはあまり乾燥していないようです。
では、他のクエリが「継承」できるデフォルトのクエリを作成するにはどうすればよいですか?これには、リレーションに基づくデフォルトのDoctrineクエリを含める必要があります。