2

メイン ドキュメントのフィールドの定義は次のとおりです。

/**
 * @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 をクリアする理由を誰かが知っている場合は?

ありがとう。

4

0 に答える 0