教义一对多返回null

时间:2016-09-30 09:00:42

标签: php symfony doctrine-orm

我试图将里程碑映射到项目但是当我尝试引用该关系时,它总是返回null。

数据库看起来很完美,targetEntity路径正确,方案正在使用

进行验证
doctrine:scheme:validate

project.php

/**
 * @ORM\OneToMany(targetEntity="Planning\Readmodel\Project\Milestone\Milestone", mappedBy="project", cascade={"persist", "remove"})
 */
private $milestones;

milestone.php

/**
 * @ORM\ManyToOne(targetEntity="Planning\Readmodel\Project\Project", inversedBy="milestones", cascade={"persist", "remove"})
 * @ORM\JoinColumn(name="projectId", referencedColumnName="projectId")
 */
private $project;

但是当我尝试获得里程碑时,我使用以下方法获得null:

$this->milestones;

知道我可能做错了什么吗?谢谢。

1 个答案:

答案 0 :(得分:1)

您拥有的实体定义即Project对我来说很好,但您的反向实体即MilestoneJoinColumn注释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命令

来更新数据库