私はSymfony2とDoctrine2を使って小さなウェブサイトを構築しています。ブログ投稿、イベント、プレスリリースがあります。これらはそれぞれ非常に似ているので、「ノード」という親テーブルを持つ単一テーブル継承(STI)を使用することに決めました。Doctrine2でクエリ継承のようなものを構築するにはどうすればよいですか?
ノードが持っている:
- 文字列であると述べている「ロケール」フィールド、ブールある「公表」欄には、「これは、このロケールに示すことのみです」。 (ロケールはリクエストによって渡されます)。
デフォルトでは、現在のロケールの公開ノードのみを表示する必要があります。
$this->createQueryBuilder('Event')
->where('Node.published = 1')
->where('Node.locale = :locale')
が、これは非常に乾燥していないようです:
もちろん、私は次のようになり、リポジトリ内のクエリの多くを作成することができます。
他のクエリが「継承」できるデフォルトのクエリを作成するにはどうすればよいですか?これには、関係に基づいたデフォルトのDoctrineクエリが含まれていなければなりません。
「公開されたノードのみを表示する」のように、他のフィルタを追加するにはどうすればよいですか? –
親「Node」を継承しているため、これらの値は依然として照会に使用できます。したがって、$ em-> getRepository( 'Events') - > findAllBy(array( 'published' => 'yes'));うまくいくはずです。 –
興味深いことに、私は 'デフォルトのプロパティ'配列を持ち、それを 'findAllBy()'に渡すことができます。ノードリポジトリに存在するgetterとsetterを持つことができます。 –