ManyToMany odm symfony2

时间:2015-09-16 18:23:08

标签: mongodb symfony odm

我需要在symfony2中使用odm进行这种模式,我有问题,因为relasion是ManyToMany而我不知道如何做到这一点。我需要帮助。 我有实体" Persona"和实体" Direccion"这些生成实体" Persona-has-Direccion"用他的ids和属性" viveAqui"。

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

我的代码:

/**
 * @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 个答案:

答案 0 :(得分:0)

不确定这是什么意思:

  

这些生成实体" Persona-has-Direccion"

但我认为基本上简单的参考就是你所需要的:

class Persona
{

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

然后生成setter和getter(在这种情况下为adder和remover):

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

您可以稍后保存:

$persona = new Persona();
$direccion = new Direccion();
$persona->addDireccion($direccion);
$dm->persist($persona);
$dm->flush($persona);

答案 1 :(得分:0)

好的,我有一个解决方案,但我不知道它是否正确。

我的代码:

   /**
     * @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;
}

现在我有3个文件。该文件" PersonaDireccion"有参考文献" Direccion"。该文件" Persona"已经嵌入了许多" PersonaDireccion"。架构是下一个:

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
   }]
}