OneToOne与Doctrine2和Symfony2的关系

时间:2012-10-16 14:53:18

标签: php symfony doctrine-orm entity

我正在尝试在我的用户和个人资料实体之间创建一个简单的OneToOne关系,这是我的控制器:http://pastie.org/5068108,我的用户实体:http://pastie.org/5068124和我的个人资料实体:http://pastie.org/5068131但我总是得到这个奇怪的错误:

注意:/opt/lampp/htdocs/Test/vendor/doctrine-dbal/lib/Doctrine/DBAL/Statement.php第98行中的数组到字符串转换。

当我试图坚持()表单时会出现此错误。

有人可以帮助我吗,我为这个错误而斗争,这对我来说毫无意义。非常感谢你。

2 个答案:

答案 0 :(得分:1)

您的用户实体中的$ profile属性应为:

/**
* @ORM\OneToOne(targetEntity="\Test\ProfileBundle\Entity\Profile", mappedBy="user")
* @JoinColumn(name="profile_id", referencedColumnName="id")
*/
private $profile;

您必须在个人资料实体中添加以下内容:

/**
* @ORM\OneToOne(targetEntity="\Test\UserBundle\Entity\User", mappedBy="profile")
*/
private $user;

之后,应用更改:

  

app / console doctrine:generate:entities Test

     

app / console doctrine:schema:update --force

已编辑:我忘了添加JoinColumn注释,正如@ shima5指出的那样。

答案 1 :(得分:1)

在User.php中:

   /**
     * @OneToOne(targetEntity="Test\ProfileBundle\Entity\Profile")
     * @JoinColumn(name="profile_id", referencedColumnName="id")
     */
    private $profile;

这是一种单向联想。

你不能单独使用mappedBy =“user”,因为它是双向的,你需要在你的个人资料中添加inversedBy =“profile”,如下所示:

   /**
     * @OneToOne(targetEntity="User", inversedBy="profile")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

用户:

   /**
     * @OneToOne(targetEntity="Test\ProfileBundle\Entity\Profile", mappedBy="user")
     */
    private $profile;