Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 在级联中持久化FOSUser实体的好方法_Symfony_Doctrine Orm_Fosuserbundle - Fatal编程技术网

Symfony 在级联中持久化FOSUser实体的好方法

Symfony 在级联中持久化FOSUser实体的好方法,symfony,doctrine-orm,fosuserbundle,Symfony,Doctrine Orm,Fosuserbundle,我想持久化用户实体扩展FOSUserBundle实体,但出现错误: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username_canonical' cannot be null 如何重载用户实体的persist函数以提供它所需的信息 我的用户实体: class User extends BaseUser { /** * @var integer $id * * @ORM\C

我想持久化用户实体扩展FOSUserBundle实体,但出现错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username_canonical' cannot be null
如何重载用户实体的persist函数以提供它所需的信息

我的用户实体:

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;
...
}
编辑响应分形器:

您的意思是我必须在persist之后手动设置usernamecononical属性吗

事实上,在表格发送到我的控制器后,我有:

$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();

       ...
    }
}

您的意思是我必须在persist之后手动设置usernamecononical属性吗?或者在哪里/什么时候?但特别是当您创建
结构的实例,然后尝试持久化/刷新时,如何执行此操作?

。。。教义2是:

  • 意识到
    结构
    用户
    之间存在关系(每个
    结构
    实例必须有一个
    用户
    实例)
  • 由于没有显式绑定到
    结构
    实例的
    用户
    ,因此它尝试创建一个空实例
  • 用户
    上的保存操作失败,因为没有数据(在本例中,usernamecononical字符串为空)
  • 你必须做的是

    在保存
    结构
    之前,请向其中添加
    用户
    的实例。。。如果要使用当前用户,请使用此

    $user = $this->get('security.context')->getToken()->getUser();
    $structure->setMaster($user);
    $em->persist($structure);
    $em->flush();
    

    请记住在控制器类中包含
    User
    实体(使用
    use
    语句)。

    在持久化用户之前是否设置了UsernameCononical属性?@FractalizeR事实上,FOSUser实体有许多属性不能为null,并且使用这种持久化方法,FOSUser无法将属性设置为良好的值。我研究了一种不用手动设置值和使用FOSUser函数来设置该值的方法。