0

我用一个比喻来让我的观点更容易理解。让我们想象一个图书馆。我们有书籍、书籍收藏和用户。书籍、收藏和用户是我的实体。

  • 一个集合有很多书(OnetoMany,双向)
  • 一本书可能已被多个用户阅读(多对多,双向)

我已经在三个实体之间建立了这些关系,到目前为止,它似乎还不错。

问题是:如何显示给定收藏的图书列表,以及当前用户是否已阅读这些图书?

我从这个请求书单开始;我不知道如何为用户添加子请求或类似的东西:

class CollectionRepository extends EntityRepository {
    public function getCollectionWithBooks($collectionName) {
        $qb = $this->createQueryBuilder('c')
           ->leftJoin('c.books', 'b')
           ->where('c.urlname = :collectionName')
                ->setParameter('collectionName', $collectionName)
           ->addSelect('b');

        return $qb->getQuery()
           ->getSingleResult();

    }
}

非常感谢!

4

1 回答 1

0

感谢 Coussinsky 找到了答案。

它终于比我预期的要简单得多:)

首先,我们需要链接到书籍的用户的 getter/setter。这可以通过使用控制台更新书籍实体来完成,例如:

php app/console doctrine:generate:entities appLibraryBundle:Book

我们将有一个 getUsers() 方法返回一个 arrayCollection。

在树枝显示中,我们可以这样做:

{% for book in collectionWithBooks.books %}
    {% if app.user in book.users %}You have read this book.{% endif %}
{% endfor %}
于 2012-09-26T08:44:24.020 回答