Inheritance 使用PHP和Doctrine 2,有没有一种方法可以实现您自己的检索数据集合?

Inheritance 使用PHP和Doctrine 2,有没有一种方法可以实现您自己的检索数据集合?,inheritance,collections,doctrine-orm,Inheritance,Collections,Doctrine Orm,在实体内创建集合时,可以在构造函数中将其初始化为ArrayCollectionArrayCollection可以扩展,这些子项可以在它的位置上使用。然而,当从数据库检索实体时,ArrayCollection被交换为一个PersistentCollection,它实现了与ArrayCollection相同的接口,但被标记为final 是否有一种实现您自己的集合类的方法,当从数据库检索数据时,允许您使用自定义集合方法对集合中的项进行排序和检索 另外,我不想修改条令源本身。我所做的是修改我的公共get

在实体内创建集合时,可以在构造函数中将其初始化为
ArrayCollection
ArrayCollection
可以扩展,这些子项可以在它的位置上使用。然而,当从数据库检索实体时,
ArrayCollection
被交换为一个
PersistentCollection
,它实现了与
ArrayCollection
相同的接口,但被标记为
final

是否有一种实现您自己的集合类的方法,当从数据库检索数据时,允许您使用自定义集合方法对集合中的项进行排序和检索


另外,我不想修改条令源本身。

我所做的是修改我的公共getCollection方法

private$collectionOfStuff//这是一个子类条令\Common\Collections\ArrayCollection(本例中为MyCustomCollectionType)
公共函数getCollectionOfStuff(){
如果(!$this->collectionOfStuff实例为MyCustomCollectionType){
$this->collectionOfStuff=新的MyCustomCollectionType($this->collectionOfStuff->toArray());
}
返回$this->collectionOfStuff;
}
之后,您必须使用$this->getCollectionOfStuff()来发挥您的魔力


这不是最好的解决方案(我本可以构建一个代理或某种类型),但由于条令尚不支持对ArrayCollection进行子类化,因此它对我来说是最快/最简单的修复方法。

这很有趣,我假设条令会将数据加载到我在实体构造中声明的集合类型中。事实显然并非如此。看起来所有的filter、add等方法都复制到了PersistentCollection类中。如果您可以创建自己的收集逻辑,那么它肯定会很有用。我希望有人能帮上忙。