FOSUserBundle并持久保存在数据库中

时间:2016-02-08 15:51:26

标签: symfony doctrine-orm fosuserbundle

我有一个继承自FOSUserBundle BaseUser类的User实体类。 另一方面是Avis实体类。

/**
 * 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对象字段,并在验证我想要的表单时:

  • Avis将保留在数据库中(已经有效)
  • 要保持的关系=>> Avis表中的user_id和fos_user表中的avis_id

这是我尝试过的没有成功的事情:

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

感谢。 的问候,

1 个答案:

答案 0 :(得分:2)

使用一对一和多对多只有一个表获取外部索引列。在您的情况下,“avis”表将获得列user_id。因此,您只需在持久化之前设置$ user属性。 Doctrine将在(重新)加载后自动在User类中设置$ 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();

 }