仅显示当前用户的关系

时间:2019-05-01 18:58:42

标签: symfony doctrine-orm symfony4

我有2个实体,即用户和课程,每个学生可以有很多课程,每个课程可以有很多学生。无论如何,我试图做到这一点,以便当用户连接到他的帐户时,它可以向他显示与他相关的所有课程。我知道我必须从我的控制器执行此操作,但是如何仅获取与他相关的人。 我的实体

jmeter
<?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;
    }
}

1 个答案:

答案 0 :(得分:0)

好吧,因为您显然具有双向关系(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实例,所以您还可以使用Collection类附带的->map->filter函数...