【问题标题】:ManyToMany odm symfony2多对多 odm symfony2
【发布时间】:2015-12-13 11:23:19
【问题描述】:

我需要使用 odm 在 symfony2 中执行此模式,我遇到了问题,因为关系是 ManyToMany,我不知道如何执行此操作。我需要帮助。 我有实体“Persona”和实体“Direccion”,它们生成带有他的 ID 和属性“viveAqui”的实体“Persona-has-Direccion”。

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

【问题讨论】:

    标签: mongodb symfony odm


    【解决方案1】:

    不知道这是什么意思:

    这些生成实体“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);
    

    【讨论】:

    • 属性“viveAqui”没有出现。结果如下:Persona{ _id: 1000, nombre: 'Carlos', apellidos: 'Gracia', Genero: 'M', direcciones: [{ direccion_id: 1 }.{ direccion_id: 2 }] }
    • 所以你不需要关系,使用集合:@MongoDB\Collection
    【解决方案2】:

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

    我的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2012-04-12
      • 2012-10-24
      • 2015-11-04
      • 1970-01-01
      • 2014-04-12
      • 2015-04-19
      相关资源
      最近更新 更多