Php 为@ID字段插入空值
我有一个用户对象,我正试图通过条令插入 关键领域是Php 为@ID字段插入空值,php,mysql,symfony,doctrine-orm,doctrine,Php,Mysql,Symfony,Doctrine Orm,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="st
/**
* @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;
}
您可以在此处看到执行插入的控制器代码
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字段将“”放入其中(空白)。我不明白为什么该值会被置空(当它作为非唯一值输入时,我将DB设置更改为error)
这个类有关联,但这是主要的,所以我先创建它
有什么想法吗 所以在测试中,我发现不能将generatedValue属性应用于非ID字段。一旦我从userID字段中删除了它(并允许Mysql自己处理),事情又开始起作用了 所以在测试中,我发现不能将generatedValue属性应用于非ID字段。一旦我从userID字段中删除了它(并允许Mysql自己处理),事情又开始起作用了 我不明白你在这里干什么。您希望
table.id
是自动生成的id,但希望table.login\u name
是主键?因为你就是这样设置的
table.id
成为主键,table.login\u 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;
我不明白你在这里干什么。您希望
table.id
是自动生成的id,但希望table.login\u name
是主键?因为你就是这样设置的
table.id
成为主键,table.login\u 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;
为什么不将$userId注释为@Id?因为这是Mysql表中自动生成的Id。要在symfony中使用内置的auth框架,我似乎必须使用登录凭据作为ID。但这与为什么它有一个ID字段有一个值,并且它插入null无关。这不是真的。看看FOSUSerbundle,用户也有一个ID字段,这是@ID。为什么不将$userId注释为@ID?因为这是Mysql表中自动生成的ID。要在symfony中使用内置的auth框架,我似乎必须使用登录凭据作为ID。但这与为什么它有一个ID字段有一个值,并且它插入null无关。这不是真的。看看FOSUSerbundle,用户也有一个ID字段,那就是@ID。