2

ArrayCollectionエンティティ内でコレクションを作成するときは、コンストラクターで として初期化します。ArrayCollection拡張することができ、それらの子はその場所で使用されます。ただし、エンティティがデータベースから取得されると、は と同じインターフェイスを実装するが としてマークされてArrayCollectionいる に交換されます。PersistentCollectionArrayCollectionfinal

データベースからデータを取得するときに、コレクションからアイテムを並べ替えて取得するためのカスタム コレクション メソッドを使用できる独自のコレクション クラスを実装する方法はありますか。

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 に答える