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
Php 创建操作。为具有1对1关系的两个实体生成表单_Php_Symfony - Fatal编程技术网

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

Php 创建操作。为具有1对1关系的两个实体生成表单,php,symfony,Php,Symfony,我想要达到的目标: 用户实体具有用户信息属性,其中存储有关用户的所有信息。我不想在创建用户实体时创建用户信息实体,并将这两个实体链接起来 用户类型: ... public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('username') ->add('password', 'password') //drugi argum

我想要达到的目标:

用户实体具有用户信息属性,其中存储有关用户的所有信息。我不想在创建用户实体时创建用户信息实体,并将这两个实体链接起来

用户类型:

...
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 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;
}
为什么在同时创建User和UserType(相同的表单)之后,userInfo在数据库中没有owner\u id值?创建后,这些实体不会相互链接


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

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


可能在你的控制器里$用户=新用户$userInfo=新的userInfo$userInfo->setOwner($user)@Cerad谢谢你,它可以工作。你也可以调整user->setInfo来调用userInfo->setOwner。这可能会更有意义,并消除额外的呼叫。
 /** 
 * @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;
}
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);
            ...