Symfony2 - ...\Entity\Users 类型的实体缺少字段“userId”的分配 ID
Posted
技术标签:
【中文标题】Symfony2 - ...\\Entity\\Users 类型的实体缺少字段“userId”的分配 ID【英文标题】:Symfony2 - Entity of type ...\Entity\Users is missing an assigned ID for field 'userId'Symfony2 - ...\Entity\Users 类型的实体缺少字段“userId”的分配 ID 【发布时间】:2013-12-31 15:56:27 【问题描述】:我总是收到这条消息:
Reuzze\ReuzzeBundle\Entity\Users 类型的实体缺少分配的 字段“userId”的 ID。标识符生成策略 实体需要先填充 ID 字段 EntityManager#persist() 被调用。如果要自动生成 标识符,而不是您需要调整元数据映射 相应地。
我试图删除:
@ORM\GeneratedValue(strategy="AUTO")
或者改成:
@ORM\GeneratedValue(strategy="IDENTITY")
@ORM\GeneratedValue(strategy="NONE")
我也粘贴了:
id:
userId:
primary: true
autoincrement: true
但没有任何效果!
我的 UserController 注册操作:
public function registerAction(Request $request)
if ($this->get('security.context')->isGranted('ROLE_USER'))
return $this->redirect($this->generateUrl('reuzze_reuzze_homepage'));
$user = new Users();
$person = new Persons();
$address = new Addresses();
$region = new Regions();
$role = new Roles();
$address->setRegion($region);
$user->setPerson($person);
$user->setUserRating('1');
$user->setRole($role);
$person->setAddress($address);
$address->setRegion($region);
$role->setRoleName('Student');
$form = $this->createForm(new RegisterType(), $user);
if ($request->getMethod() == 'POST')
$form->bind($request);
if($form->isValid())
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($user);
$password = $encoder->encodePassword($user->getuserPassword(), $user->getuserSalt());
$user->setuserPassword($password);
$user->setRole($role);
$date = new \DateTime('NOW');
//$user->setuserId('1');
$user->setuserCreated($date);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->persist($person);
$entityManager->persist($address);
$entityManager->persist($region);
$entityManager->persist($role);
$entityManager->flush();
return $this->redirect($this->generateUrl('reuzze_reuzze_homepage'));
return $this->render('ReuzzeReuzzeBundle:User:register.html.twig', array(
'form' => $form->createView()
));
我的注册类型:
public function buildForm(FormBuilderInterface $builder, array $options)
$builder->add('person' , new PersonType())
->add('userUsername' , 'text', array(
'label' => 'Username',
'attr' => array('placeholder' => 'Username')
))
->add('userEmail' , 'email', array(
'label' => 'E-mailadres',
'attr' => array('placeholder' => 'E-mail address')
))
->add('userSalt' , 'repeated', array(
'type' => 'password',
'first_name' => 'password',
'second_name' => 'confirm',
'first_options' => array(
'attr' => array('class' => 'form-control', 'placeholder' => 'Password'),
'label' => 'Password',
),
'second_options' => array(
'label' => 'Repeat Password',
'attr' => array('class' => 'form-control', 'placeholder' => 'Repeat Password'),
),
'invalid_message' => 'The passwords are not identical!',
)
);
用户模型(userId)
/**
* @var integer
*
* @ORM\Column(name="user_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $userId;
/**
* Set userId
*
* @param integer $userId
* @return Users
*/
public function setUserId($userId)
$this->userId = $userId;
return $this;
/**
* Get userId
*
* @return integer
*/
public function getUserId()
return $this->userId;
唯一有效的是当我将 $user->setuserId('1'); 放入用户控制器注册操作中。但显然这不是我想要的,有人有解决办法吗?
如果我在我的 UserController 中评论 $entityManager->persist($user); ,它会创建除用户之外的所有其他对象,但在这种情况下我没有收到错误。
【问题讨论】:
@ORM\GeneratedValue(strategy="IDENTITY")
应该可行 - 向我们展示该模型的实际属性定义?编辑:你也需要@ORM\Id
。
你是说我的用户模型?
是的,我看到你添加了它。唯一看起来不对的是它应该是protected
而不是private
。切换到IDENTITY
后你清除代理了吗?
嗯,我现在把它保护起来了。如果你的意思是清除缓存,那么我做到了,是的。
cache:clear
在 Symfony 中没有清除代理文件夹,你必须手动删除它。
【参考方案1】:
解决办法:
删除资源>配置>教义中的所有orm.yml文件
【讨论】:
以上是关于Symfony2 - ...\Entity\Users 类型的实体缺少字段“userId”的分配 ID的主要内容,如果未能解决你的问题,请参考以下文章