我试图将里程碑映射到项目但是当我尝试引用该关系时,它总是返回null。
数据库看起来很完美,targetEntity路径正确,方案正在使用
进行验证doctrine:scheme:validate
/**
* @ORM\OneToMany(targetEntity="Planning\Readmodel\Project\Milestone\Milestone", mappedBy="project", cascade={"persist", "remove"})
*/
private $milestones;
/**
* @ORM\ManyToOne(targetEntity="Planning\Readmodel\Project\Project", inversedBy="milestones", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="projectId", referencedColumnName="projectId")
*/
private $project;
但是当我尝试获得里程碑时,我使用以下方法获得null:
$this->milestones;
知道我可能做错了什么吗?谢谢。
答案 0 :(得分:1)
您拥有的实体定义即Project
对我来说很好,但您的反向实体即Milestone
在JoinColumn
注释JoinColumn
注释name
注释中存在问题在当前实体的列中,该列与项目实体保持关系,但在referencedColumnName
中,您必须提供父实体的列,该列是项目实体的主键,应该是referencedColumnName="id"
因此,里程碑实体的注释应该像
/**
* @ORM\ManyToOne(targetEntity="Planning\Readmodel\Project\Project", inversedBy="milestones", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $project;
根据官方文件5.11. Mapping Defaults
连接表的名称默认为简单组合, 参与类的不合格类名,以。分隔 强调性格。连接列的名称默认为 简单的,不合格的目标类的类名,后跟 “_ID”。 referencedColumnName始终默认为“id”,就像在 一对一或多对一映射。
确保通过运行doctrine update命令
来更新数据库