我试图绘制三元关系。 ER模型是下一个:
责任是用户,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
关于什么是我的错误的任何想法?。
答案 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