我目前正在尝试扩展SonataUserBundle的用户,以便与现有实体添加新的ManyToMany关系。
我根据此处的答案扩展了用户 - Extending Sonata User Bundle and adding new fields
user.php的
/**
* @ORM\ManyToMany(targetEntity="Foo\BarBundle\Entity\Pledge", inversedBy="pledgedUsers")
**/
private $pledgedOn;
// (...) generated getters and setters here
Pledge.php
/**
* @ORM\ManyToMany(targetEntity="Foo\UserBundle\Entity\User", inversedBy="pledgedOn")
**/
private $pledgedUsers;
// (...) generated getters and setters here
我在同步架构时注意到的第一件事是,它创建了2个数据透视表,而不只是一个:pledge_user
和user_pledge
。我尝试添加@ORM\JoinTable
,但这只是更改一个名称。当我向两者添加相同的@ORM\JoinTable
时,我得到'table already exists'错误。
当我尝试访问admin中的用户列表时,我收到一个很大的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
我确信这很简单,但是我正在找我这个问题的根源。我错过了什么?
Full User.php:http://pastebin.com/TXunsgm1
Full Pledge.php:http://pastebin.com/Mta6aiVm
答案 0 :(得分: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")
修复了问题。