Symfony2:FOS_Userbundle更新数据库模式时的重复定义?

时间:2011-11-10 14:07:08

标签: symfony

我正在尝试使用FOS_UserBundle来管理我的用户,但每次尝试更新数据库

php app/console doctrine:schema:update --force

我收到以下错误:

字段或标识符列映射中实体上的列'username'的重复定义。 fos用户包

当我注释掉用户名时,也会发生'电子邮件'。

我的用户类实际上非常基本:

namespace My\MyBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{

/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string", length="100") 
*/
protected $username;

/**
* @ORM\Column(type="string", length="100") 
*/
protected $name;

/**
* @ORM\Column(type="string", length="100")
*/
protected $firstname;

/**
* @ORM\Column(type="string", length="150")
*/
protected $email;

}

我错过了什么吗?

3 个答案:

答案 0 :(得分:13)

您的My\MyBundle\Entity\User扩展了FOS\UserBundle\Entity\User,后者又扩展了FOS\UserBundle\Model\User,其中已有$username字段。它还有一个$email字段。因此,您只需要从班级中删除$username$email字段。

答案 1 :(得分:10)

使用FOS \ UserBundle \ Model \ User扩展,而不是FOS \ UserBundle \ Entity \ User类。您应该始终使用Model扩展,而不是Entity。

答案 2 :(得分:4)

对我来说,它通过删除列注释来实现。

select substring(a.data, 1, patindex('%[^0-9-]%', a.data)-1)
 from (
    SELECT substring(data, patindex('%[0-9]%', data), len(data)) as data 
    FROM Table X
    ) a

您可以使用 @ORM \ AttributeOverrides 到User或BaseUser类来覆盖BaseUser的注释。 例如:

/**
 * @ORM\Column  --> remove this line!
 */
protected $password;