PHP Symfony4 DoctrineORM OneToMany - PullRequest
       46

PHP Symfony4 DoctrineORM OneToMany

0 голосов
/ 09 апреля 2020

Есть 2 объекта Курсы и UserTask. Они имеют отношение OneToMany, соответственно. По какой-то причине, когда пользователь входит в систему и выполняет задачу в моем приложении, идентификатор курса не устанавливается для базы данных, хотя курс и пользовательская задача связаны. В этом случае устанавливаются все остальные поля, например userId. И код абсолютно идентичен рабочим примерам. Если вы вручную сохраняете идентификатор курса в базе данных, он работает, но мне нужно, чтобы этот идентификатор курса автоматически устанавливался при вводе пользователем какой-либо задачи. Подскажите пожалуйста может я что то пропустил? Как вы можете видеть на скриншоте, у меня все поля заполнены, но courseId пуст Изображение базы данных

Это мой объект курсов

   /**
     * @ORM\OneToMany( targetEntity="UserTask", mappedBy="courses", cascade={"persist"}, orphanRemoval=true )
     */
    private $userTask;

 public function __construct()
    {
       $this->userTask = new \Doctrine\Common\Collections\ArrayCollection();
    }

   /**
     * @return ArrayCollection
     */
    public function getUserTask()
    {
        return $this->userTask;
    }

    /**
     * @param mixed $userTask
     * @return Courses
     */
    public function setUserTask($userTask)
    {
        if (count($userTask) > 0) {
            foreach ($userTask as $i) {
                $this->addUserTask($i);
            }
        }
        return $this;
    }

    /**
     * @param UserTask $userTask
     */
    public function addUserTask(UserTask $userTask)
    {
        $userTask->setCourses($this);
        $this->userTask->add($userTask);
    }

    /**
     * @param UserTask $userTask
     */
    public function removeUserTask(UserTask $userTask)
    {
        $this->userTask->removeElement($userTask);
    }

Это мой объект UserTasks

   /**
     * @ORM\ManyToOne(targetEntity="Courses", inversedBy="userTask")
     */
    private $courses;

 /**
     * @param Courses $courses
     * @return UserTask
     */
    public function setCourses(Courses $courses)
    {
        $this->courses = $courses;
        return $this;
    }

    /**
     * @return Courses
     */
    public function getCourses(): ?Courses
    {
        return $this->courses;
    }

Мой контроллер

/**
     * @Rest\Get("/v2/courses", name="show_all_courses")
     * @param CoursesRepository $coursesRepository
     * @param UserTaskRepository $userTaskRepository
     * @param TaskRepository $taskRepository
     * @return Response
     */
    public function showAllCourses(
        CoursesRepository $coursesRepository,
        UserTaskRepository $userTaskRepository,
        TaskRepository $taskRepository
    )
    {
        /** @var \App\Entity\User $user */
        $user = $this->getUser();
        $courses = $coursesRepository->findAll();
        $total = $taskRepository->count(['courses' => $courses]);
        $userTasks = $userTaskRepository->count(['status' => UserTask::SUCCESS, 'user' => $user, 'courses' => $courses]);
        if ($total && $userTasks) {
            $calculation = ceil(100.0 / $total * $userTasks);
        }
        $coursesResult = [];
        foreach ($courses as $course) {
            $coursesResult[] = [
                "id" => $course->getId(),
                "title" => $course->getTitle(),
                "description" => $course->getDescription(),
                "progress" => $calculation ?? 0
            ];
        }
        return $this->handleView($this->view($coursesResult));
    }
...