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的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 获取登录用户

Symfony2 无法连接到 sqlite

找不到 Symfony2 组件类

Symfony2 - 访问被拒绝

Symfony2 / SonataUserBundle - 注册后自动登录

Symfony2 OneToMany 关系