Doctrine ODM:PersistentCollection :: toArray返回空数组

时间:2014-12-17 09:54:31

标签: php mongodb symfony doctrine-orm odm

这里是主要文件字段的定义:

/**
 * @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 Serializer序列化它们,但我发现,引用是空数组。经过一番调查,我发现,对于getReferences,文档返回 PersistentCollection 的实例:

  • count返回2 [ok]
  • getMongoData返回MongoIds数组[ok]
  • toArray返回空数组[无效]

由于初始化方法,因为它清除了mongoData。

我通过以下代码获得了正确的结果:

/**
 * @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?

感谢。

0 个答案:

没有答案