У меня возникла проблема с получением полного массива (с всеми данными встроенных дочерних коллекций и объектов) моего документа. Мой документ выглядит именно так:
use Doctrine\Common\Collections\ArrayCollection;
/** @Document(collection="user") */
class User {
/** @Id */
protected $id;
/** @String */
protected $firstname;
/** @String */
protected $lastname;
/** @EmbedMany(targetDocument="Email") */
protected $email;
/** @EmbedMany(targetDocument="Address") */
protected $address;
/** @EmbedMany(targetDocument="Subscription") */
protected $subscription;
/**
* Construct the user
*
* @param array $properties
* @throws User_Exception
*/
public function __construct(array $properties = array()) {
$this->email = new ArrayCollection();
$this->address = new ArrayCollection();
$this->subscription = new ArrayCollection();
foreach($properties as $name => $value){
$this->{$name} = $value;
}
}
...
Мне нужен полный массив встроенной коллекции для вывода всех данных и их рендеринга с помощью json . Мой запрос выглядит так:
$query = $this->_dbContainer->getDocumentManager()->createQueryBuilder('User')->field('deletedAt')->exists(false);
$result = $query->field('id')->equals($id)->getQuery()->getSingleResult();
Например, если я вызываю функцию toArray()
следующим образом:
$array = $result->getSubscription()->toArray();
print_r($array);
Тогда вывод - это просто массив верхнего уровня:
[0] => Object Subscription...
[1] => Object Subscription...
...
Как я могу легко получить такой массив?
[0] => array('subscriptionLabel' => 'value1', 'field' => 'value1', ...)
[1] => array('subscriptionLabel' => 'value2', 'field' => 'value2', ...)
...
Существуют ли передовые практики или, возможно, отсутствуют некоторые вспомогательные сценарии для предотвращения чего-то уродливого, подобного этому коду (как обрабатывать child -> child -> child szenarios? Ugly -> ugly ugly -> ugly ugly ugly -> ...) :
$example = array();
foreach($result->getSubscription() as $key => $subscription) {
$example[$key]['subscriptionLabel'] = $subscription->getSubscriptionLabel();
$example[$key]['field'] = $subscription->getField();
...
}
Большое спасибо,
Stephan