【发布时间】:2013-10-22 13:09:54
【问题描述】:
我有一个试图通过 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;
}
您可以在此处查看用于插入的控制器代码。
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 字段会被“放入其中”(空白区域)。我不明白为什么该值被清空(当它作为非唯一值出现时,我将数据库设置更改为错误)。
这个类有关联,但这是主要的,所以我先创建它。
有什么想法吗?
【问题讨论】:
-
为什么不将 $userId 注释为 @Id?
-
因为这是从 Mysql 表中自动生成的 ID。并且要在 symfony 中使用内置的身份验证框架,似乎我必须使用登录凭据作为 ID。但这与为什么它有一个有值的 ID 字段并且它正在插入 null 并不真正相关
-
那不是真的。看看 FOSUSerbundle,用户也有一个 ID 字段,那个字段就是@ID。
标签: php mysql symfony doctrine-orm doctrine