加入请求:OneToMany + ManyToMany

时间:2012-09-25 07:59:14

标签: orm symfony entity-relationship

我正在使用类比来使我的观点更容易理解。 让我们想象一下图书馆。我们有书籍,书籍收藏和用户。 书籍,收藏品和用户是我的实体。

  • 一个Collection有很多书(OnetoMany,bidirectionnal)
  • 一本书可能已被多个用户阅读(ManytoMany,bidirectionnal)

我已在三个实体之间建立了这些关系,到目前为止,似乎很好。

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

我从这份书籍清单请求开始;我不知道如何为用户添加子请求或类似内容:

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();

    }
}

非常感谢!

1 个答案:

答案 0 :(得分:0)

感谢Coussinsky找到了答案。

它最终比我预期的要复杂得多:)

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

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

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

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

{% for book in collectionWithBooks.books %}
    {% if app.user in book.users %}You have read this book.{% endif %}
{% endfor %}