Symfony2:警告:spl_object_hash()期望参数1为对象,给定整数

时间:2014-10-30 23:02:26

标签: php symfony insert one-to-many

我在实体项目课程之间存在多对一的关系,因为每个课程都可以有很多项目,因此很多项目可能与同一课程相关。

这些是我的实体:

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之间的关系,那么bug就不会出现。即使我评论用于设置课程ID的行,该错误也会消失,所以我认为这个关系存在问题,但我无法理解其中的位置。

我刚刚在stackoverflow上阅读了这样的其他问题,但它并没有帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:6)

它正在寻找您使用实例为Course的对象只传递课程的ID不起作用。

你可以这样做:

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

正如Full提到的,如果您知道该实体已经存在,您可以通过执行以下操作来设置它而不进行数据库查找:

$project->setCourse($this->getDoctrine()
                         ->getManager()
                         ->getReference('Namespace:Course', 5)
);
相关问题