Symfony 4获取用户实体通过ID

3

我正在尝试创建一个简单的多对多关系,目标是将朋友添加到数据库中。

我正在试图使用我的控制器添加朋友,但我找不到一种方法来获取使用ID的用户实体。

根据文档中的示例:

    /**
     * @Entity
     */
    class User
    {
        /**
         * @Id
         * @Column(type="integer")
         */
        private $id;
    
        /**
         * @ManyToMany(targetEntity="User")
         * @JoinTable(name="friends",
         *     joinColumns={@JoinColumn(name="user_a_id", referencedColumnName="id")},
         *     inverseJoinColumns={@JoinColumn(name="user_b_id", referencedColumnName="id")}
         * )
         * @var \Doctrine\Common\Collections\ArrayCollection
         */
        private $friends;
    
        /**
         * Constructor.
         */
        public function __construct()
        {
            $this->friends = new \Doctrine\Common\Collections\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();
                $user->addFriend($id);
            }
            return $this->redirectToRoute('friends');
        }

Symfony希望我使用实体的一个实例而不是$id

传递给App\Entity\User::addFriend()的第1个参数必须是App\Entity\User的一个实例,但是只提供了字符串,并且我找不到如何使用实例的方法。

1个回答

8
尝试这个:
        if (isset($_POST['add'])) {
            $id = $_POST['id'];
            $user = $this->getUser();
            $friend = $this->getDoctrine()->getRepository(User::class)->find($id);
            $user->addFriend($friend);
        }

这里有关于如何使用Doctrine实体的详细信息,请点击此处

它能够运行,但还没有添加到数据库中,我认为问题在于我的addFriend函数,谢谢回答。 - Tran Nicas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接