代码之家  ›  专栏  ›  技术社区  ›  Tran Nicas

Symfony4条令不更新数据库

  •  0
  • Tran Nicas  · 技术社区  · 7 年前

    我正在尝试使用一个条令和一个控制器来更新数据库,使用了许多自引用,问题是我没有错误,但MySQL在函数完成后不会更新,所以我无法找出我弄糟了什么。就像什么都没有附加一样。 有没有办法更新MySql或至少调试MySql?

    这是我的代码:

        /**
             * @ManyToMany(targetEntity="User")
             * @JoinTable(name="friends",
             *     joinColumns={@JoinColumn(name="user_a_id", referencedColumnName="id")},
             *     inverseJoinColumns={@JoinColumn(name="user_b_id", referencedColumnName="id")}
             * )
             * @var ArrayCollection
             */
            private $friends;
    
            /**
         * Constructor.
         */
        public function __construct()
        {
            $this->friends = new ArrayCollection();
        }
    
        /**
         * @return array
         */
        public function getFriends()
        {
            return $this->friends->toArray();
        }
    
        /**
         * @param  User $user
         * @return void
         */
        public function addFriend(User $user)
        {
            if (!$this->friends->contains($user)) {
                $this->friends->add($user);
                $user->addFriend($this);
            }
        }
    
        /**
         * @param  User $user
         * @return void
         */
        public function removeFriend(User $user)
        {
            if ($this->friends->contains($user)) {
                $this->friends->removeElement($user);
                $user->removeFriend($this);
            }
        }
    

    和我的控制器:

         /**
             * @Route("/addFriends")
             */
            public function addFriends()
            {
                if (isset($_POST['add'])) {
                    $id = $_POST['id'];
                    $user = $this->getUser();
                    $friend = $this->getDoctrine()->getRepository(User::class)- 
               >find($id);
                    $user->addFriend($friend);
                }
                return $this->redirectToRoute('friends');
            }
    
            /**
             * @Route("/removeFriends")
             */
            public function removeFriends()
            {
                if (isset($_POST['add'])) {
                    $id = $_POST['id'];
                    $user = $this->getUser();
                    $friend = $this->getDoctrine()->getRepository(User::class)->find($id);
                    $user->removeFriend($friend);
                }
                return $this->redirectToRoute('friends');
            }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Tran Nicas    7 年前

    好了,我终于看到了我弄糟的地方,很简单,当我将用户添加到arrayCollection时,我的更改没有保存,所以我用一个空数组结束,要保存更改,只需添加:

    $em = $this->getDoctrine()->getManager();
    $em->persist($user);
    $em->flush();
    

    最后,我的控制器如下所示:

     public function addFriends(Request $request)
        {
            if (isset($request) && is_string($id = $request->get('id'))) {
                $user = $this->getUser();
                $friend = $this->getDoctrine()->getRepository(User::class)->find($id);
                $user->addFriend($friend);
                $em = $this->getDoctrine()->getManager();
                $em->persist($user);
                $em->flush();
            }
            return $this->redirectToRoute('friends');
        }
    

    希望这能帮助别人!

    推荐文章