创建操作.为具有1对1关系的两个实体生成表单


Create operation. Generate form for two entities with 1-to-1 relation

我想达到的目标:

User实体具有UserInfo属性,用于存储User的所有信息。当User实体创建并链接这两个实体时,我不想创建UserInfo实体。

UserType:

...
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('username')
        ->add('password', 'password') //drugi argument robi input jako password
    ;
    $builder->add('info', new UserInfoType());
}
...
用户:

...
/**
 * @var UserInfo
 * 
 * @ORM'OneToOne(targetEntity="UserInfo", mappedBy="owner", cascade={"persist", "remove"})
 * */
private $info;
...

用户信息:

 /** 
 * @var User
 * 
 * @ORM'OneToOne(targetEntity="User", inversedBy="info", cascade={"persist"})
 * @ORM'JoinColumn(name="owner_id", referencedColumnName="id")
 **/
private $owner;
...
 /**
 * Set owner
 *
 * @param 'Custom'AzureusBundle'Entity'User $owner
 * @return UserInfo
 */
public function setOwner('Custom'AzureusBundle'Entity'User $owner)
{
    $owner->setInfo($this);
    $this->owner = $owner;
    return $this;
}

为什么创建用户和UserType在同一时间(同一形式)userInfo没有owner_id值在数据库中?这些实体在创建后不能相互链接。

我假设我应该在某处调用setOwner()函数。但是我不知道在哪里。

正如@Cerad在上面的评论中所说,我应该在用户控制器中创建UserInfo(创建函数)

public function createAction(Request $request)
    {
        $entity = new User();
        $user_info = new UserInfo();
        $entity->setInfo($user_info);
        $user_info->setOwner($entity);
        ...
        if ($form->isValid()) {
            ...
            $em->persist($entity);
            $em->persist($user_info);
            ...