假设我有一个实体User
和一个实体Book
,并且它们都被加入User.bookId = Book.id
(这标志着用户拥有某本书,关系类型为 oneUserToManyBook)。
如果我现在想使用 Doctrine 的 DQL 或 QueryBuilder 执行性能友好的获取,那么在 Symfony2/Doctrine2 webapp 中实现这Books
一点User
的最佳方法是什么,以便我可以User
在 Twig 模板的循环中使用它们?
枝条
{% for user in users %}
{{ user.name|e }}
{% for address in user.getAddressesByUserId(user.getId()) %}
{{ address.city }}
{% endfor %}
{% endfor %}
我看到了两种方法,但都没有达到我的目标:
第一种方法
创建一个自定义存储库类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
.
第二种方法
执行与上面相同的查询 - 不是在我的UserRepository
,而是直接在我的User
实体类中。
这里的问题:我可以在我的 Twig 模板中调用这个方法,但我不能(也不应该)EntityManager
在我的User
实体类中使用。