Symfony 2和关系

时间:2014-09-04 12:44:44

标签: symfony doctrine

当我尝试使用User实体保存Related Profile实体时(我使用cascade={"persist"}选项)我保存了两个实体,但Profile实体保存为空{{1} }}字段。

  • 我怎么解决这个问题? 关系:

用户:

user_id

个人资料:

/**
 * @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\Profile", mappedBy="user", cascade={"persist"})
 */

1 个答案:

答案 0 :(得分:1)

cascade={"persist"}与此无关。

您定义此方法的方式,您尚未创建一个(bidrectional)关系,其中用户指向个人资料,同一个个人资料指向同一个用户。

相反,您有两个(unidrectional)关系:用户指向一个配置文件,而配置文件指向(可能)不同的用户。

如果查看表格,这是可见的。您的User表将具有profile_id字段,Profile表将具有user_id字段(但您只需要两个bot)。由于您可能只是在User Entity中设置了Profile属性,而不是Profile实体的User属性,因此Profile表的user_id字段为空。

您需要一个(单个)双向一对一关系,如下所述:

http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#one-to-one-bidirectional

您实际想要存储关系的实体需要有inversedBy注释参数:

/**
   * @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\User", inversedBy="profile", cascade={"persist"})
   * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
   */