2014-04-29 5 views
2

Je n'arrive pas à trier le document incorporé. Voici mon code.Tri du document incorporé dans Symfony2 avec Doctrine ODM

Children.php

namespace Acme\CCBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document 
*/ 
class Children { 
/.. 
    /** 
    * @MongoDB\EmbedMany(targetDocument="Vaccine") 
    */ 
    protected $vaccine = array(); 
} 

Vaccine.php

namespace Acme\CCBundle\Document; 
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 
/** 
* @MongoDB\EmbeddedDocument 
*/ 
class Vaccine 
{ 
    /** 
    * @MongoDB\Date 
    */ 
    protected $recordDate; 

    /** 
    * @MongoDB\String 
    */ 
    protected $vaccineName; 
} 

Dans mon contrôleur: RecordController.php

public function showVaccineAction($id) { 
     $child = $this->get('doctrine_mongodb') 
       ->getRepository('AcmeCCBundle:Children') 
       ->find($id); 

     $vac = $child->getVaccine(); 

     return $this->render(
         'AcmeCCBundle:Record:show_vaccine.html.twig', array('vac' => $vac) 
     ); 
    } 

Je juste être capable recherche tout le vaccin d'un enfant, et ce n'est pas ordonné. Quelqu'un peut-il m'aider?

Répondre

0

Vous ne pouvez pas trier le document incorporé dans mongodb (respectivement dans doctrine odm).

vous pouvez utiliser deux options:

  1. mise à jour document incorporé avec le tri - vous recréez les documents, donc pas besoin de trier (par défaut MongoDB retour documents triés par ordre créé). utiliser ce cas si les documents ne sont pas nombreux et/ou stocker le résultat trié de façon permanente

  2. utiliser l'agrégation dans mongodb -nous dénormaliserons par document incorporé et trier de quelque façon que ce soit. big minus - le résultat peut être différent du document original et ne peut pas s'hydrater dans la classe ODM (problème de mappage vers document). utiliser ce cas, si les documents sont trop nombreux et/ou résultat stocké temporaire (par exemple montrant que dans le modèle)

PS. aucune commande de tri dans votre code;)

Questions connexes