User
エンティティとエンティティがあり、Book
両方が結合されていると仮定しますUser.bookId = Book.id
(これは、ユーザーが特定の本を所有していることを示します。リレーション タイプは oneUserToManyBook です)。
Books
Doctrine の DQL または QueryBuilder を使用して、読み取ったすべてのパフォーマンスに適したフェッチを実行したい場合User
、Symfony2/Doctrine2 Web アプリケーションでこれを実装してUser
、Twig テンプレートのループで使用できるようにする最良の方法は何ですか?
小枝
{% for user in users %}
{{ user.name|e }}
{% for address in user.getAddressesByUserId(user.getId()) %}
{{ address.city }}
{% endfor %}
{% endfor %}
2 つのアプローチがありますが、どちらも私の目標にはつながりません。
最初のアプローチ
カスタム リポジトリ クラスを作成しますBookRepository
。
public function getBooksOwnedByUser($user_id) {
return $em->createQuery('SELECT b.title
FROM MyBundle\Entity\User u,
MyBundle\Entity\Book b
WHERE u.book_id = b.id'
AND u.id = :user_id)
->setParameter('user_id', $user_id)
->getResult();
}
問題getBooksOwnedByUser()
: 正常に動作しますが、Twig テンプレートを呼び出すことができません (エンティティUser
には関連付けられていませんが、のサブクラスであるリポジトリに関連付けられているためです) Doctrine\ORM\EntityRepository
。
2番目のアプローチ
上記と同じクエリを実行します。 myではなく、エンティティ クラスUserRepository
で直接実行します。User
ここでの問題: Twig テンプレートでこのメソッドを呼び出すことはできますがEntityManager
、User
エンティティ クラスで を使用することはできません (使用すべきではありません)。