показывая только текущие отношения пользователя - PullRequest
0 голосов
/ 01 мая 2019

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

<?php

/**
 * @ORM\Entity
 */
class User implements UserInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    public function getId()
    {
        return $this->id;
    }


    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Courses", mappedBy="Users")
     */
    private $courses;
    public function __construct()
    {
        $this->courses = new ArrayCollection();
    }


    /**
     * @return Collection|course[]
     */
    public function getCourses(): Collection
    {
        return $this->courses;
    }

    public function addCourse(Course $course): self
    {
        if (!$this->courses->contains($course)) {
            $this->courses[] = $course;
            $course->addUser($this);
            return $this;
        }

        return $this;
    }

    public function removeCourse(Course $course): self
    {
        if ($this->courses->contains($course)) {
            $this->courses->removeElement($course);
            $course->removeUser($this);
        }

        return $this;
    }
}

<?php

/**
 * @ORM\Entity(repositoryClass="App\Repository\CourseRepository")
 */
class Course
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=55)
     */
    private $name;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\user", inversedBy="courses")
     */
    private $users;


    public function __construct()
    {
        $this->users = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getname(): ?string
    {
        return $this->name;
    }

    public function setname(string $name): self
    {
        $this->name = $name;

        return $this;
    }



    /**
     * @return Collection|user[]
     */
    public function getUser(): Collection
    {
        return $this->user;
    }

    public function addUser(user $user): self
    {
        if (!$this->users->contains($user)) {
            $this->users[] = $user;
        }

        return $this;
    }

    public function removeUser(user $user): self
    {
        if ($this->users->contains($user)) {
            $this->users->removeElement($user);
        }

        return $this;
    }


}

1 Ответ

0 голосов
/ 01 мая 2019

Что ж, поскольку у вас явно двунаправленные отношения (inversedBy и mappedBy), вам не нужно делать ничего особенного. Доктрина уже сделала это. Просто захватите пользователя в контроллере:

// Once you have a protected controller route,
// you can use $this->getUser() from inside the
// controller action to access the current authenticated user.

$user = $this->getUser();

И повторяйте, как вам хочется, через соответствующие курсы:

foreach ($user->getCourses() as $course) {

}

Поскольку getCourses также возвращает экземпляр Collection, вы также можете использовать функции ->map и ->filter, которые поставляются с классом Collection ...

...