为@ID字段插入null的Doctrine

时间:2013-10-14 20:59:15

标签: php mysql symfony doctrine-orm doctrine

我有一个用户对象,我试图通过Doctrine插入。

关键字段是

  /**
 * @ORM\Column(type="integer", name="id")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $userId;
/**
 * @ORM\Id
 * @ORM\Column(type="string", name="login_name")
 */
private $loginName;
/**
 * @ORM\Column(type="string", name="display_name") 
 */
private $name;

在我的控制器代码中,我可以通过对象上的getLoginName()方法回显$ loginName字段的值。

/**
 * @param mixed $loginName
 */
public function setLoginName($loginName)
{
    $this->loginName = $loginName;
}

/**
 * @return mixed
 */
public function getLoginName()
{
    return $this->loginName;
}

您可以在此处查看Controller代码以执行插入操作。

 if ($request->getMethod() == 'POST') {
        $form->bind($request);
        $login = $form->getData();

        $factory = $this->get('security.encoder_factory');
        echo($login->getLoginName());
        $encoder = $factory->getEncoder($login);
        $login->setPassword($encoder->encodePassword($login->getPassword(), $login->getSalt()));
        $em = $this->getDoctrine()->getManager();
        $em->persist($login);
        $em->flush();

        $this->get('session')->setFlash(
            'success',
            'Account Successfully Created'
        );

但是,当我在我的实体上调用persist和flush时,login_name字段会被放入它(空白区域)。我无法理解为什么值被淘汰(我将数据库设置更改为非唯一时的错误)。

这个类有关联,但这是主要的,所以我先创建它。

有什么想法?

2 个答案:

答案 0 :(得分:1)

我不知道你在这里做什么。您希望table.id成为自动生成的ID,但您希望table.login_name成为主键吗?因为这就是你设置的方式

我个人认为你应该想要的是table.id成为主键,而table.login_name是唯一的

/**
 * @ORM\Column(type="integer", name="id")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $userId;

/**
 * @ORM\Column(type="string", name="login_name", length=255, unique=true)
 */
private $loginName;

答案 1 :(得分:0)

因此,在测试中,我发现您无法将generatedValue属性应用于Non-ID字段。一旦我从userID字段中删除了它(并允许Mysql自己处理它),事情就开始重新开始了。