2017-09-14 3 views
0

J'essaie de créer une base de données MongoDB avec quelques références dans Symfony. Dans mon contexte que je 2 documents clients et réunion, Un client peut avoir Beaucoup réunion afin que ce que je faisais:Ajouter des réfrences au schéma MongoDB dans le projet Symfony

Meeting.php

<?php 

namespace FrontOfficeBundle\Document; 

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

/** 
* @MongoDB\Document 
*/ 
class Meeting 
{ 
    /** 
    * @MongoDB\Id 
    * @MongoDB\ReferenceOne(targetDocument="Customer") 
    */ 
    protected $id; 

    /** 
    * @MongoDB\Field(type="timestamp") 
    */ 
    protected $creationDate; 

..

Customer.php

<?php 

namespace FrontOfficeBundle\Document; 

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

/** 
* @MongoDB\Document 
*/ 
class Customer 
{ 
    /** 
    * @MongoDB\Id() 
    * @MongoDB\ReferenceMany(targetDocument="Meeting") 
    */ 

    protected $id; 

    /** 
    * @MongoDB\Field(type="string") 
    */ 
    protected $username; 

...

puis quand je lance la ligne de commande:

php doctrine bin/console: MongoDB: schéma: mise à jour

Je suis:

Aucun identificateur/clé primaire spécifié pour Document 'FrontOfficeB undle \ Document \ Meeting '. Chaque document doit avoir un identifiant/clé primaire.

J'ai essayé en utilisant @MongoDB \ UniqueIndex() mais pas moyen. Je pense que @MongoDB \ Id est supposé être un identifiant !!!

Versions

  • Symfony 3.2
  • MongoDB 3.4.4

Toutes les idées?

Merci à vous.

Répondre

0

Enfin, je trouve une solution, d'abord j'ai ajouté un champ appelé réunions $ dans le document client et un autre client de $ à la réunion du document comme celui-ci:

Customer.php

/** 
* @MongoDB\ReferenceMany(targetDocument="meeting", mappedBy="customer") 
*/ 
protected $meetings; 

Réunion.php

/** 
* @MongoDB\ReferenceOne(targetDocument="customer", inversedBy="meetings") 
*/ 
protected $customer; 

Lancez ensuite la ligne de commande pour générer des setters et getters:

bin php/doctrine console: MongoDB: générer: documents mybundleBundle

Et quand je lance un fixtures (Création d'un client puis sa réunion), tout fonctionne bien, vous remarquerez que la relation 1 à plusieurs a été définie dans votre document (j'utilise la boussole pour afficher mongoDB) comme One-to-squillions modèle (pour plus de détails sur la relation 1-à-N: (https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1) qui est dire le document fils (réunion) contient la référence du parent comme indiqué ci-dessous:

client

enter image description here

Réunion

enter image description here

Dans MongoDB, @ MongDB/Id est une clé primaire et la clé étrangère et n'essaie jamais de définir des références à ce champ unique.

Merci de votre attention.