0

I need to do this schema in symfony2 with odm, I have problems because the relasion is ManyToMany and I dont know How to do this. I need help. I have the entity "Persona" and entity "Direccion" and these generate the entity "Persona-has-Direccion" with his ids and the attribute "viveAqui".

Persona{
  _id: 1000,
  nombre: 'Carlos',
  apellidos: 'Gracia',
  genero: 'M',
  direcciones: [{
        direccion_id: 1,
        viveAqui: true
     }.{
        direccion_id: 2,
        viveAqui: true
   }]
}

My code:

/**
 * @MongoDB\Document
 */
class Direccion
{
    /**
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

    /**
     * @MongoDB\String
     */
    private $pais;

    /**
     * @MongoDB\String
     */
    private $estado;

    /**
     * @MongoDB\String
     */
    private $ciudad;
/**
     * @MongoDB\Boolean
     */
    private $viveAqui;
}

/**
 * @MongoDB\Document
 */
class Persona
{
    /**
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

    /**
     * @MongoDB\String
     */
    private $nombre;

    /**
     * @MongoDB\String
     */
    private $apellidos;

    /**
     * @MongoDB\String
     */
    private $genero;
}

2 Answers2

0

Not sure what this mean:

these generate the entity "Persona-has-Direccion"

but I think basically simple reference is what you need:

class Persona
{

/**
 *
 * @MongoDB\ReferenceMany(targetDocument="Direccion", simple=true)
 */
protected $direcciones;

Then generate setter and getter (adder and remover in this case):

php app/console doctrine:mongodb:generate:documents YourBundle

You can save it later:

$persona = new Persona();
$direccion = new Direccion();
$persona->addDireccion($direccion);
$dm->persist($persona);
$dm->flush($persona);
malcolm
  • 5,486
  • 26
  • 45
  • The atribute "viveAqui" doesnt appear. This is the result: Persona{ _id: 1000, nombre: 'Carlos', apellidos: 'Gracia', genero: 'M', direcciones: [{ direccion_id: 1 }.{ direccion_id: 2 }] } – carlos sierra garcia Sep 16 '15 at 22:48
  • So you don't need relationship, use collection: `@MongoDB\Collection` – malcolm Sep 17 '15 at 09:03
0

Ok, I have a solution, but I dont know if it is correct.

My code:

   /**
     * @MongoDB\Document
     */
    class Persona
    {
        /**
         * @MongoDB\Id(strategy="auto")
         */
        private $id;

        /**
         * @MongoDB\EmbedMany(targetDocument="PersonaDireccion")
         */
        private $direccionPersona;

        /**
         * @MongoDB\String
         */
        private $nombre;

        /**
         * @MongoDB\String
         */
        private $apellidos;

        /**
         * @MongoDB\String
         */
        private $genero;
}

class PersonaDireccion
{
    /**
     * @MongoDB\Id(strategy="auto")
     */
    private $id;

    /**
     * @MongoDB\ReferenceOne(targetDocument="Direccion", cascade={"persist", "remove"})
     */
    private $direccion;


    /**
     * @MongoDB\Boolean
     */
    private $viveAqui;
}

/**
 * @MongoDB\Document
 */
class Direccion
{
    /**
     * @MongoDB\Id(strategy="auto")
     */
    private $id;



    /**
     * @MongoDB\String
     */
    private $pais;

    /**
     * @MongoDB\String
     */
    private $estado;

    /**
     * @MongoDB\String
     */
    private $ciudad;
}

Now I have 3 documents. The document "PersonaDireccion" has referenceOne to "Direccion". The document "Persona" has embedMany "PersonaDireccion". The schema is the next:

Persona{
  _id: 1000,
  nombre: 'Carlos',
  apellidos: 'Gracia',
  genero: 'M',
  direcciones: [{
        direccionPersona_id: 1,
        direccion_id: 1,
        viveAqui: true
     }.{
        direccionPersona_id: 2,
        direccion_id: 2,
        viveAqui: true
   }]
}