Symfony4 Doctrine не обновляет базу данных - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь обновить базу данных с помощью доктрины и контроллера, используя самореференции ManyToMany, проблема в том, что у меня нет ошибок, но 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 Ответ

0 голосов
/ 11 мая 2018

Хорошо, так что я наконец-то увидел, что я испортил, и все просто, когда я добавляю пользователя в массив 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');
    }

Надеюсь, это кому-нибудь поможет!

...