【问题标题】:Symfony one to one Bidirectional embedded formsSymfony 一对一双向嵌入表单
【发布时间】:2016-02-24 01:34:37
【问题描述】:

我在用户和用户之间有一对一的双向关系 研究所。每个用户一次可以拥有一个学院,每个学院 一次由一个用户拥有。我想做的是我有 我的机构表中的机构数据,现在我想创建用户和 在创建用户的过程中,我想给他分配一个机构。

我使用嵌入式表单作为集合,但问题是数据未以嵌入式表单加载。

class User extends BaseUser
{
    /**
     * @ORM\OneToOne(targetEntity="PNC\InstitutesBundle\Entity\Institutes", mappedBy="user", cascade={"persist", "merge"})
     */
    protected $institute;
}


class Institutes {
   /**
     * @ORM\OneToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="institute")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;
}

UserInstituteType 表单。

 $builder->add('name', 'genemu_jqueryselect2_entity', array(
        //'mapped' => false,
        'required' => false,
        'class'=>'PNC\InstitutesBundle\Entity\Institutes',
        'property'=>'name',
        'multiple' => false,
        'attr' => array(
            'class' => 'form-control'
        )
        ));

在用户类型表单中。

 ->add('firstname','text',array(
                'label' => ucfirst('First Name *'),
                'required' => true,
                'constraints' => $constraints['firstname'],
                'attr'=> array(
                    'class' => 'form-control',
                    'autocomplete' => 'off'
                ),
                'label_attr'=> array(
                    'class' => 'control-label',
                ),
                ))
            ->add('lastname','text',array(
                'label' => ucfirst('Last Name *'),
                'required' => true,
                'constraints' => $constraints['lastname'],
                'attr'=> array(
                    'class' => 'form-control',
                    'autocomplete' => 'off'
                )))
            ->add('username', 'text', array(
                'required' => true,
                'pattern' => '^\(\d{5}\)-\d{7}-\d{1}$',
                'label' => ucfirst('NIC *'),
                'max_length' => 15,
                'constraints' => $constraints['username'],
                'attr'=> array(
                    'class' => 'form-control',
                    'autocomplete' => 'off'
                )
            ))
      ->add('institute',new UserInstituteType(),array(
                    'data_class' => 'PNC\InstitutesBundle\Entity\Institutes',
                    'label' => false,
                    'required' => false,
                    'mapped' => false,
                ))

在控制器中

public function newAction(Request $request){
   $user = new User();
        $em = $this->getDoctrine()->getManager();
        $institutes = new Institutes();
        $user->setInstitute($institutes);
        $form = $this->createForm(new UserType(), $user, array(
            'action' => $this->generateUrl('pnc_users_users_new'),
            'method' => 'POST',
        ));
}

问题是表单渲染得很好,但在研究所下拉, 没有加载数据,因此我可以选择一个机构并将其分配给 用户。 symfony中的新/小exp,所以卡在这个,不知道哪里做错了......

【问题讨论】:

  • 如果您将UserInstituteType 替换为简单的entity。它是否显示了带有数据的选择?
  • 是的,我像以前一样这样做..
  • 它保存了用户,但在研究所表中user_id列仍然是空的。

标签: php forms symfony doctrine-orm symfony2-forms


【解决方案1】:

首先,将entity 类型用于表单类型中的institute 字段。一切正常后,您可以再次测试genemu表单类型。

接下来,我认为您的二传手有问题。因为你的评论:

它保存了用户,但在机构表中,user_id 列仍然是空的。

class User extends BaseUser
    {
    /**
     * @ORM\OneToOne(targetEntity="PNC\InstitutesBundle\Entity\Institutes", mappedBy="user", cascade={"persist", "merge"})
     */
    protected $institute;

    public function setInstitute(Institute $institute)
    {
        // Set the owning side of the relation!
        $institute->setUser($this);
        $this->institute = $institute;
    }
}


class Institutes {
   /**
     * @ORM\OneToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="institute")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

    public function setUser(User $user)
    {
        $this->user = $user;
    }
}

您需要设置关系的拥有方,否则将不保存任何数据。

【讨论】:

  • 谢谢,我花了一整天的时间来手动摆脱这个,从查询中手动将它放入数据库中......你的回答就是这样做的。太棒了。
  • 你能不能也给我一个解决方案。 stackoverflow.com/questions/33868697/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多