Вот определение поля для основного документа:
/**
* @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 для которого:
Похоже, это из-за инициализировать метод, который очищает 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 и почему метод инициализации очищает mongoData?
Благодарю.
Задача ещё не решена.
Других решений пока нет …