我试图使用FOS_UserBundle来管理我的用户,但每次我尝试更新数据库
php app/console doctrine:schema:update --force
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
在字段或标识符列映射中实体上的列'username'的重复定义.用户捆绑包
当我注释掉用户名时,它也会出现'电子邮件'.
我的用户类实际上非常基本:
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;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
igo*_*orw 13
你的My\MyBundle\Entity\User
延伸FOS\UserBundle\Entity\User
,反过来扩展FOS\UserBundle\Model\User
,已经有一个$username
领域.它也有一个$email
领域.因此,您只需要从类中删除$username
和$email
字段.
小智 10
使用FOS\UserBundle\Model\User扩展,而不是FOS\UserBundle\Entity\User类.您应该始终使用Model扩展,而不是Entity.
对我来说,它通过删除 Column注释来工作。
/**
* @ORM\Column --> remove this line!
*/
protected $password;
Run Code Online (Sandbox Code Playgroud)
您可以使用@ORM \ AttributeOverrides到用户或BaseUser类从BaseUser覆盖注解。例:
/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
* @AttributeOverrides({
* @AttributeOverride(name="password",
* column=@Column(
* nullable = false,
* unique = true,
* length = 123
* )
* )
* })
class User extends BaseUser
{
...
Run Code Online (Sandbox Code Playgroud)