FOSUserBundle 并保存在数据库中

FOSUserBundle and persisting in database

我有一个继承自 FOSUserBundle BaseUser class 的用户实体 class。 另一边是 Avis 实体 class。

/**
 * Avis
 *
 * @ORM\Table()
 * @ORM\Entity
 */
 class Avis
 {
   /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     private $id;

     /**
      * @var integer
      *
      * @Assert\NotBlank(message = "Merci d'attribuer une note", groups = {"Default"})
      *
      * @ORM\Column(name="note", type="smallint")
      */
      private $note;

    /**
      * @var string
      *
      * @Assert\NotBlank(message = "Merci d'entrer un message", groups = {"Default"})
      * @Assert\Length(max = 500, maxMessage = "Votre message doit contenir au maximum {{ limit }} caractères de longueur", groups = {"Default"})
      *
      * @ORM\Column(name="message", type="string", length=500)
      */
      private $message;

    /**
      * @Assert\Type(type="LeJardinEbene\Bundle\Entity\User")
      *
      * @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\User", cascade={"persist"}, inversedBy="avis")
      * @ORM\JoinColumn(nullable=true)
      */
      private $user;



/**
  * User
  *
  * @ORM\Table(name="fos_user")
  * @ORM\Entity
  */
  class User extends BaseUser
  {
   /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     protected $id;

   /**
     * @Assert\Type(type="LeJardinEbene\Bundle\Entity\Avis")
     *
     * @ORM\OneToOne(targetEntity="LeJardinEbene\Bundle\Entity\Avis", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
     protected $avis;

所以 Avis 是这个双向关系的所有者。 在我的表单中,我显示了 Avis 对象字段,并且在验证我想要的表单时:

这是我尝试过但没有成功的方法:

    $user = $this->getUser();
    $form = $this->createForm('avis', $avis);
    $form->handleRequest($request);
    $avis = new Avis();if ($form->isValid()) {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($avis);
        $entityManager->flush();
        if($user) {
            $userManager = $this->get('fos_user.user_manager');
            $userManager->updateUser($avis->getUser(), true);
        }

谢谢。 此致,

对于一对一和多对多,只有一个 table 获得外部索引列。在您的情况下,"avis" table 将得到一列 user_id。所以你只需要在你坚持之前设置 $user 属性 。 Doctrine 将在(重新)加载后自动在用户 class 中设置 $avis 属性。

 $user = $this->getUser();
 $avis = new Avis();
 $form = $this->createForm('avis', $avis);

 $form->handleRequest($request);
 if ($form->isValid()) {
        $entityManager = $this->getDoctrine()->getManager();

        $avis->setUser($user);

        $entityManager->persist($avis);
        $entityManager->flush();

 }