使用ManyToMany字段扩展SonataAdmin用户

时间:2014-03-24 03:43:17

标签: php symfony fosuserbundle sonata-admin sonata-user-bundle

我目前正在尝试扩展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_useruser_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

1 个答案:

答案 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")

修复了问题。