2

在实体中创建集合时,您将其初始化为ArrayCollection构造函数中的一个。ArrayCollection可以扩展并在它的地方使用那些孩子。但是,当从数据库中检索实体时,它会ArrayCollection被交换为PersistentCollection实现相同接口ArrayCollection但标记为 的final

有没有一种方法可以实现您自己的集合类,当从数据库中检索数据时,您可以使用自定义集合方法对集合中的项目进行排序和检索。

PS 我不想修改 Doctrine 源代码本身。

4

1 回答 1

1

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

private $collectionOfStuff; //this is a subclassed Doctrine\Common\Collections\ArrayCollection (MyCustomCollectionType in this case)

public function getCollectionOfStuff() {
   if (!$this->collectionOfStuff instanceof MyCustomCollectionType) {
        $this->collectionOfStuff = new MyCustomCollectionType($this->collectionOfStuff->toArray());
    }

    return $this->collectionOfStuff;
}

之后你必须使用 $this->getCollectionOfStuff() 来发挥你的魔力。

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

于 2012-08-17T15:40:43.360 回答