我的数据库中有一个一对多关系。元素的编辑、删除和添加过去工作得很好。然而,经过一些更改(我无法追踪所有更改)后,它就不再起作用了
现在,当我获取具有一对多关系的对象时,我会得到一个持久集合来表示我的多方集合。我想以前不是这样的。在我的构造函数中,我创建了一个新的数组集合,而不是持久集合。
我查阅了条令文件,发现:
PersistentCollection表示具有持久状态。
我不明白那是什么意思。
你能告诉我吗:
- 有一个简单的一对多的持久集合是正常的吗
- 这些收藏品是如何出现的?(而不是常规阵列采集)
- 最后持久收集
1.使用简单的一对多持久集合是否正常?
不,正常的是ArrayCollection,我以前从未使用过PersistentCollection,但它有一些有用的功能,在某些情况下可能会有用。
http://www.doctrine-project.org/api/orm/2.1/class-Doctrine.ORM.PersistentCollection.html
- 这些收藏品是如何出现的?(而不是通常的ArrayCollection)
它们是集合——它们看起来和普通的ArrayCollection一样,里面有带有其类型的实体。
- 最后,持久集合究竟有什么用途
正如您在文档中看到的那样,PersistentCollection具有ArrayCollection所没有的大量函数,并且PersistentCllection使用EntityManager,该EntityManager允许与数据库进行交互,而不必持久化,只需刷新即可。
添加到Serrar的描述中。
PersistentCollections only注意到另一个实体的连接。如果您正确地制作了OneToMany或ManyToOne映射/链接,这是正确的。
use DoctrineCommonCollectionsArrayCollection;
public function __construct()
{
$this->comments = new ArrayCollection();
}
// @ORMOneToMany(targetEntity="Comments", mappedBy="pages")
private $comments;
public function getComments()
{
return $this->comments;
}
public function setComments(Comments $comments)
{
$this->comments = $comments;
}
它们不会向您提供数组数据。
在上面的示例中,使用PageEntity的getComments方法来拉入与当前页面相关的注释。这假设您拥有页面对象。在构造中设置新的ArrayCollection对象非常重要:关系映射元数据链
原则:阶级坚持收集-顶部的描述描述了目的。