映射三元关系

时间:2013-11-01 19:13:54

标签: symfony doctrine-orm

我试图绘制三元关系。 ER模型是下一个: enter image description here

责任是用户,Alumno是另一种类型的用户(学生)。并且TipoRelacion定义责任人是否是学生的母亲,父亲或导师(Alumno)。

所以,我认为,映射关系(alumno_relacion_responsable)并从其他表中定义bidireccionals OneToMany。

我的实体是:

class Responsable{
     // other declarations

    /**
     * @ORM\OneToMany(targetEntity="ResponsableAlumno", mappedBy="alumno")
     */
    protected $hijos;

    // More declarations
}

class Alumno{
     // other declarations

    /**
     * @ORM\OneToMany(targetEntity="ResponsableAlumno", mappedBy="responsable")
     */
    protected $padres;

    // More declarations
}

所以,在relationchip实体中:

Class ResponsableAlumno{

    /**
     * @ORM\Id
     * @ORM\Column(name="Responsable_IdUsuario")
     * @ORM\ManyToOne(targetEntity="Responsable", inversedBy="idusuario")
     * @ORM\JoinColumn(name="Responsable_IdUsuario", referencedColumnName="idusuario")
     */

    protected $responsable;

    /**
     * @ORM\Id
     * @ORM\Column(name="Alumno_IdUsuario")
     * @ORM\ManyToOne(targetEntity="Alumno", inversedBy="idusuario")
     * @ORM\JoinColumn(name="Alumno_IdUsuario", referencedColumnName="idusuario")
     */
    protected $alumno;

    // Other declarations
}

但是,在测试实体时,Symfony说(在加载脚本上):

  

注意:未定义的索引:alumno in   /var/www/AppsManantiales/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php

关于什么是我的错误的任何想法?。

1 个答案:

答案 0 :(得分:1)

inversedBy设置应与“hijos”和“padres”匹配,而不是相关实体的ID。还有一些其他问题,不应在关系列上指定ORM \ Id,也不需要指定Column:

class ResponsableAlumno{

    /**
     * @ORM\ManyToOne(targetEntity="Responsable", inversedBy="hijos")
     * @ORM\JoinColumn(name="Responsable_IdUsuario", referencedColumnName="idusuario")
     */

    protected $responsable;

    /**
     * @ORM\ManyToOne(targetEntity="Alumno", inversedBy="padres")
     * @ORM\JoinColumn(name="Alumno_IdUsuario", referencedColumnName="idusuario")
     */
    protected $alumno;

    // Other declarations
}

尽管如此,我相信你的关系已经翻了,我想你正在寻找更像这样的东西:

  • 许多人对一个负责任的校友负责
  • 许多校友到一个负责任的校友
  • 负责任的责任人
  • 许多校友的一位负责任的校友

或者更可能是一个校友到一个负责任的校友,反之亦然。

点击此处查看有关Doctrine的关系语法和设置的完整文档: http://docs.doctrine-project.org/en/2.1/reference/association-mapping.html