У меня есть отношения один-на-один между сущностями проект а также Курс потому что у каждого курса может быть много проектов, очень много проектов могут быть связаны с тем же курсом.
Это мои сущности:
class Project{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//... other fields ...//----------------------- DATABASE RELATIONSHIP ----------------//
//PROJECT-COURSE - M:1 relationship
/**
* @ORM\ManyToOne(targetEntity="Course", inversedBy="project")
* @ORM\JoinColumn(name="course_id", referencedColumnName="id")
**/
private $course;
а также
class Course{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
//... other fields ...
//----------------------- DATABASE RELATIONSHIP----------------//
//COURSE-PROJECT 1:M relationship
/**
* @ORM\OneToMany(targetEntity="Project", mappedBy="course")
**/
private $project;
Ошибка появляется, когда я пытаюсь вставить новый проект для моего курса, это мой конструктор форм:
$builder
->add('name', 'text', array(
'attr' => array('class' => 'form-control')))
->add('description', 'textarea', array(
'attr' => array('class' => 'form-control', 'rows' => '10')))
->add('submit', 'submit', array(
'attr' => array('class' => 'btn btn-primary')));
Я пытаюсь вставить эти данные, создавая объект Project и заполняя его результатом формы, как вы можете видеть:
$project->setName($form->get('name')->getData());
$project->setDescription($form->get('description')->getData());
$project->setPhasesNumber($form->get('phases_number')->getData());
$project->setPathNumber($form->get('path_number')->getData());
$project->setYear(date('Y'));
$project->setCourse(5); //number 5 is just a test
$em = $this->getDoctrine()->getManager();
$em->persist($project);
$em->flush();
Проблема должна быть связана с командой $project->setCourse(5);
и я видел, что если я удалю отношения между Project и Course, ошибка не появится. Ошибка исчезает, даже если я прокомментирую строку, используемую для установки идентификатора курса, поэтому я думаю, что у меня есть проблема с этим отношением, но я не могу понять, где.
Я только что прочитал другой вопрос, как этот, на stackoverflow, но он мне не помогает.
Заранее спасибо.
Он ищет, чтобы вы использовали объект с экземпляром Course
просто прохождение ID курса не работает.
Вы могли бы сделать:
//...
$course = $this->getDoctrine()
->getManager()
->getRepository('Namespace:Course')
->findOneById(5);
$project->setCourse($course);
//...
Как отмечает Полное, если вы знаете, что сущность уже существует, вы можете просто установить ее без просмотра базы данных, выполнив:
$project->setCourse($this->getDoctrine()
->getManager()
->getReference('Namespace:Course', 5)
);
Других решений пока нет …