メイン ドキュメントのフィールドの定義は次のとおりです。
/**
* @var ArrayCollection
* @MongoDB\ReferenceMany(
* targetDocument="Some\Namespace\Document\Reference",
* sort={"creationDate": "desc"},
* simple=true
* )
* @Expose
* @Groups({"Main"})
* @Type("ArrayCollection<Some\Namespace\Document\Reference>")
* @var \Some\Namespace\Document\Reference[]
*/
protected $references;
主なドキュメントのリストを取得して、JMS シリアライザー経由でシリアル化しようとしましたが、参照が空の配列であることがわかりました。調査の結果、getReferences の場合、documents がPersistentCollectionのインスタンスを返すことがわかりました。
- count は 2 を返します [ok]
- getMongoData は MongoIds の配列を返します [ok]
- toArray が空の配列を返す [無効]
mongoData をクリアするinitializeメソッドが原因のようです。
次のコードで適切な結果を達成しました。
/**
* @VirtualProperty
* @SerializedName("reference_ids")
* @Groups("Main")
* @return array
*/
public function getReferenceIds()
{
$out = array();
foreach ($this->getReferences()->getMongoData() as $val) {
$out[] = (string)$val;
}
return $out;
}
しかし、それは単なる近道であり、適切な解決策だとは思いません。
PersistentCollection を使用してこれらの ID またはドキュメント全体を取得する方法と、初期化メソッドが mongoData をクリアする理由を誰かが知っている場合は?
ありがとう。