OneToMany
1つのサッカーチームに多くの選手がいるという関係があります。すべてのサッカーチームを一覧表示し、各チームのキャプテンの名前を表示したいと思います。
各プレーヤーエンティティには、外部キー(team_id)と、0または1に設定されたフィールド'captain'があります。現在、次のクエリを実行しています。
$teams = $this
->getDoctrine()
->getRepository('FootballWebsiteBundle:Team')
->createQueryBuilder('t')
->setFirstResult(($pageNumber * $resultPerPage) - $resultPerPage)
->setMaxResults($resultPerPage)
->add('where','t.deleted = 0')
->add('orderBy', 't.name DESC')
->getQuery()->getResult();
次に、小枝の各チームをループするときに、チームエンティティ内のフィルターであるteam.getTeamCaptain()。getName()を実行します。
public function getTeamCaptain() {
$them = $this->players->filter(function($p) {
return $p->getCaptain() == 1;
});
return $them->first();
}
このクエリを実行するためのより良い方法はありますか?