Orm 加入请求:OneToMany+;许多

Orm 加入请求:OneToMany+;许多,orm,symfony,entity-relationship,Orm,Symfony,Entity Relationship,我用了一个类比来让我的观点更容易理解。 让我们想象一个图书馆。我们有书籍、藏书和用户。 书籍、收藏和用户是我的实体 一个藏书集有许多书(一本书、两本书) 一本书可能已经被几个用户阅读过(许多,双向) 我已经在这三个实体之间建立了这些关系,到目前为止,似乎还不错 问题是:如何显示给定集合的书籍列表,以及当前用户是否阅读过这些书籍 我从这个书单的请求开始;我不知道如何为用户添加子请求或类似的内容: class CollectionRepository extends EntityReposito

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

  • 一个藏书集有许多书(一本书、两本书)
  • 一本书可能已经被几个用户阅读过(许多,双向)
我已经在这三个实体之间建立了这些关系,到目前为止,似乎还不错

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

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

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

    }
}

多谢各位

多亏了库辛斯基才找到了答案

最终,事情没有我想象的那么复杂:)

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

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 %}

如果在books和用户之间添加了MtoM,则应该能够在books实体中创建一个方法getUsers。这将返回一个arraycollection(如果您这样声明的话),只需执行一个in_数组或其他任何操作,就可以知道您的用户是否阅读了该书。(如果我不清楚或者你需要一个例子,请告诉我)谢谢你的帮助。最后,我注意到arraycollection和setter是在我使用控制台更新实体时由Symfony创建的。