2012-10-16 69 views
-1

我试图创建一个简单的OneToOne关系我的用户和配置文件实体,这里是我的控制器:http://pastie.org/5068108,我的用户实体:http://pastie.org/5068124和我的配置文件实体:http://pastie.org/5068131但我总是得到这个奇怪的错误:OneToOne与Doctrine2和Symfony2的关系

注意:数组字符串转换在/opt/lampp/htdocs/Test/vendor/doctrine-dbal/lib/Doctrine/DBAL/Statement.php线98

当我试着这个错误出现坚持()我的形式。

有人可以帮助我,我与这个错误斗争,这对我来说没有任何意义。非常感谢你。

回答

1

在您的用户实体您$资料特征应该是:

/** 
* @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测试

应用程序/控制台学说:架构:更新--force

编辑:我忘了加上JoinColumn注解,如@ shima5指出。

+0

嗨,感谢您的帮助,我已经做出了正确的修改,没有任何变化,错误风格在这里:/ –

+0

除此之外,“数组到字符串转换”注意,您在执行persist()时是否发生错误?你有没有检查你的数据库,看看你的对象是否被持续? –

+0

我的Profile对象没有被保存在我的数据库中,当persist()函数启动时出现这个错误......我做了一个我的Profile对象的var_dump,并且有来自表单的所有信息,但是不能保存。 –

1

在user.php的:

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

这是一个单向关联。

不能使用的mappedBy = “用户” 孤独,因为它是双向的,你需要在你的个人资料中添加inversedBy = “个人资料” 是这样的:

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

和用户:

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

谢谢shima5,但没有任何变化,这个错误仍然存​​在我的控制器试图坚持我的表格... –

+0

$ profile-> setUser($ yourUser);然后坚持$ profile – shima5

+0

没有新的,我开始疯狂与这个错误... –