我想坚持用户实体扩展FOSUserBundle实体但发生错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username_canonical' cannot be null
如何重载我的用户实体的持久功能以提供所需的信息?
我的用户实体:
class User extends BaseUser
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
*
* @ORM\OneToOne(targetEntity="MyApp\MainBundle\Entity\Project")
*/
private $project;
...
}
我的项目实体:
class Structure
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer $master
*
* @ORM\OneToOne(targetEntity="Uriae\UserBundle\Entity\User", cascade={"persist"})
*
* @Assert\NotBlank()
* @Assert\Type(type="Uriae\UserBundle\Entity\User")
*/
private $master;
...
}
编辑回应FractalizeR:
你的意思是我必须在persist之后手动设置usernameCanonical属性吗?
在表格发送到我的控制器后,我确实知道了这一点:
$structure = new \Uriae\MainBundle\Entity\Structure();
if ($request->getMethod() == 'POST')
{
$form->bindRequest($request);
if ($form->isValid())
{
$em = $this->getDoctrine()->getEntityManager();
$em->persist($structure);
$em->flush();
...
}
}
你的意思是我必须在持久化后手动设置usernameCanonical属性吗?或者何时/何时?但特别是如何?
答案 0 :(得分:3)
当您创建Structure
的实例,然后尝试持久/刷新... Doctrine2是:
Structure
与User
之间存在关系(每个Stucture
实例必须有User
个实例)User
显式绑定到Structure
实例,所以它会尝试创建一个空实例。User
上的保存操作失败,因为没有数据(在这种情况下,usernameCanonical字符串为空)你必须做的是......
在保存Structure
之前,请向其添加User
的实例...如果您要使用当前用户,请使用此
$user = $this->get('security.context')->getToken()->getUser();
$structure->setMaster($user);
$em->persist($structure);
$em->flush();
请记住在控制器类中包含User
实体(使用use
语句)。