Symfony2: Предупреждение: spl_object_hash () ожидает, что параметр 1 будет объектом, задано целое число

У меня есть отношения один-на-один между сущностями проект а также Курс потому что у каждого курса может быть много проектов, очень много проектов могут быть связаны с тем же курсом.

Это мои сущности:

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, но он мне не помогает.

Заранее спасибо.

5

Решение

Он ищет, чтобы вы использовали объект с экземпляром Course просто прохождение ID курса не работает.

Вы могли бы сделать:

//...
$course = $this->getDoctrine()
->getManager()
->getRepository('Namespace:Course')
->findOneById(5);
$project->setCourse($course);
//...

Как отмечает Полное, если вы знаете, что сущность уже существует, вы можете просто установить ее без просмотра базы данных, выполнив:

$project->setCourse($this->getDoctrine()
->getManager()
->getReference('Namespace:Course', 5)
);
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]