0

我目前正在尝试扩展 SonataUserBundle 的用户以添加与现有实体的新多对多关系。

我根据此处找到的答案扩展了用户 -扩展奏鸣曲用户捆绑并添加新字段

用户.php

/**
 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")
 **/
private $pledgedOn;

// (...) generated getters and setters here

质押.php

/**
 * @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")
 **/
private $pledgedUsers;

// (...) generated getters and setters here

当我同步模式时,我注意到的第一件事是它创建了 2 个数据透视表,而不仅仅是一个:pledge_useruser_pledge. 我尝试添加一个@ORM\JoinTable,但这只是改变一个的名称。当我将相同的内容添加@ORM\JoinTable到两者时,我会收到“表已存在”错误。

当我尝试在管理员中访问用户列表时,我收到了一个很大的 sql 错误

An exception occurred while executing 'SELECT count(DISTINCT u0_.id) AS sclr0 FROM User u0_ LEFT JOIN fos_user_user_group f2_ ON u0_.id = f2_.user_id LEFT JOIN fos_user_group f1_ ON f1_.id = f2_.group_id':

SQLSTATE[42703]: Undefined column: 7 ERROR: column u0_.id does not exist

我确信这很简单,但我正在寻找这个问题的根源。我错过了什么?

完整用户.php:http: //pastebin.com/TXunsgm1

完整的 Pledge.php:http ://pastebin.com/Mta6aiVm

4

1 回答 1

0

我知道这是一个愚蠢的错误。我有

 * @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")

 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")

其中一个必须是mappedBy而不是inversedBy。将第二个更改为

 * @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", mappedBy="pledgedUsers")

解决了这个问题。

于 2014-03-25T01:58:04.740 回答