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创建的。