Symfony 4 получает пользователя Entity по id - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать простое отношение ManyToMany, цель - добавить друга в базу данных.

Я пытаюсь добавить друга с помощью моего контроллера, но не могу найти способ получить сущность пользователя с помощью идентификатора.

Следуя примеру в документации:

/**
 * @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');
    }

Вместо $ id Symfony хочет, чтобы я использовал экземпляр сущности: Аргумент 1, передаваемый в App \ Entity \ User :: addFriend (), должен быть экземпляром App \ Entity \ User, задана строка, и я не могу найти способ использовать один

1 Ответ

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

Попробуйте это:

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

Здесь - подробности того, как Вы должны работать с сущностями доктрины

...