FOSUserBundle并坚持数据库

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

/**
 * Avis
 *
 * @ORMTable()
 * @ORMEntity
 */
 class Avis
 {
   /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
     private $id;

     /**
      * @var integer
      *
      * @AssertNotBlank(message = "Merci d'attribuer une note", groups = {"Default"})
      *
      * @ORMColumn(name="note", type="smallint")
      */
      private $note;

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

    /**
      * @AssertType(type="LeJardinEbeneBundleEntityUser")
      *
      * @ORMOneToOne(targetEntity="LeJardinEbeneBundleEntityUser", cascade={"persist"}, inversedBy="avis")
      * @ORMJoinColumn(nullable=true)
      */
      private $user;



/**
  * User
  *
  * @ORMTable(name="fos_user")
  * @ORMEntity
  */
  class User extends BaseUser
  {
   /**
     * @var integer
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
     protected $id;

   /**
     * @AssertType(type="LeJardinEbeneBundleEntityAvis")
     *
     * @ORMOneToOne(targetEntity="LeJardinEbeneBundleEntityAvis", mappedBy="user")
     * @ORMJoinColumn(nullable=true)
     */
     protected $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);
            }
    

    谢谢。 问候,


    使用一对一和多对多只有一个表可以获得一个外部索引列。 在你的情况下,“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();
    
     }
    
    链接地址: http://www.djcxy.com/p/91689.html

    上一篇: FOSUserBundle and persisting in database

    下一篇: Dealing with FOSUserBundle PlainPassword field