iv'e eu un problème pour recevoir un tableau complet (avec toutes les données des collections enfants intégrées et les objets) de mon document. Mon document ressemble exactement à celui-ci:Doctrine ODM (MongoDB) - Obtenir un tableau complet d'un objet?
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;
}
}
...
je besoin d'une gamme complète d'une collection intégrée à la sortie l'ensemble des données et de le rendre par JSON. Ma requête ressemble à ceci:
$query = $this->_dbContainer->getDocumentManager()->createQueryBuilder('User')->field('deletedAt')->exists(false);
$result = $query->field('id')->equals($id)->getQuery()->getSingleResult();
Par exemple, si j'appelle la fonction toArray()
comme ceci:
$array = $result->getSubscription()->toArray();
print_r($array);
Ensuite, la sortie ist juste un tableau au niveau supérieur:
[0] => Object Subscription...
[1] => Object Subscription...
...
Comment puis-je obtenir facilement un tableau comme celui-ci?
[0] => array('subscriptionLabel' => 'value1', 'field' => 'value1', ...)
[1] => array('subscriptionLabel' => 'value2', 'field' => 'value2', ...)
...
Y a-t-il des meilleures pratiques ou peut-être quelques scripts d'aide manquants pour empêcher quelque chose de laid comme ce code (comment gérer enfant -> enfant -> enfant szenarios laid -> laid laid -> laid laid laid -> ...):
$example = array();
foreach($result->getSubscription() as $key => $subscription) {
$example[$key]['subscriptionLabel'] = $subscription->getSubscriptionLabel();
$example[$key]['field'] = $subscription->getField();
...
}
Merci beaucoup, Stephan
Oui, mais si vous avez [la logique de migration du schéma] (http://jwage.com/2010/07/30/doctrine-mongodb-odm-schema-migrations/) dans votre modèle? Tout cela serait sauté si vous contourniez l'hydrate. – anushr
Si vous avez une logique de migration de schéma, vous pouvez implémenter une fonction toArray() pour vos documents où vous chargez toutes les méthodes get() du document et le renvoyez en tant que tableau – Gigala