php - Symfony2 : Warning: spl_object_hash() expects parameter 1 to be object, 整数给定

标签 php symfony insert one-to-many

实体ProjectCourse 之间存在多对一关系,因为每门类(class)可以有很多项目,所以很多项目可能与同一门类(class)相关。

这些是我的实体:

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;

当我尝试为我的类(class)插入一个新项目时出现错误,这是我的表单生成器:

            $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); 有关,我已经看到如果我删除项目和类(class)之间的关系,错误就不会出现。即使我注释了用于设置类(class) ID 的行,错误也会消失,所以我认为我对这种关系有问题,但我不明白在哪里。

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

提前致谢。

最佳答案

它正在寻找您使用带有Course 实例的对象。仅传递类(class) ID 是行不通的。

你可以这样做:

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

正如@Full 提到的,如果您知道该实体已经存在,您可以通过以下方式设置它而无需进行数据库查找:

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

关于php - Symfony2 : Warning: spl_object_hash() expects parameter 1 to be object, 整数给定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664890/

相关文章:

php - 如何在 PSR-15 中间件堆栈中调用函数( Controller 操作)

php - Apache/PHP 中 session 文件的位置

java - 递归输出一个新数组?

ios - 防止 UITableView 超出单元格绑定(bind) View 在 insertRowsAtIndexPaths : 上剪辑

php - mysql 如何取回最后插入的行

php - mysql仅当另一个字段为空或为空时才从行中删除

php - paypal 不接受 'amount' 我通过了

symfony - 在 Symfony2 dev env Controller 中捕获 swiftmailer 异常

php - liip_imagine 是否将 jpeg/jpg/png 文件转换为 webp? - symfony PHP 7.4.9

tinymce - Symfony2 TinymceBundle