【问题标题】:Symfony Form Insert Multiple Values Selected via Select2Symfony 表单插入通过 Select2 选择的多个值
【发布时间】:2015-11-19 05:42:17
【问题描述】:

我在学院和课程实体之间存在多对多关系。桥梁实体是 InstituteCourse。因为它也涉及一些额外的领域。 我希望通过一个表单提交将多个课程分配给单个机构。

class Institutes {
/**
*@ORM\OneToOne(targetEntity="PNC\InstitutesBundle\Entity\InstitutesCourses", mappedBy="institute")
*/
protected $instituteCourses;
}


class Courses {
/**
* @ORM\OneToMany(targetEntity="PNC\InstitutesBundle\Entity\InstitutesCourses", mappedBy="course")
*/
    protected $instituteCourses;
}

class InstitutesCourses {
    /**
     * @ORM\ManyToOne(targetEntity="PNC\InstitutesBundle\Entity\Institutes", inversedBy="instituteCourses")
     * @ORM\JoinColumn(name="institute_id", referencedColumnName="id")
     */
    protected $institute;
    /**
     * @ORM\ManyToOne(targetEntity="PNC\CoursesBundle\Entity\Courses", inversedBy="instituteCourses")
     * @ORM\JoinColumn(name="course_id", referencedColumnName="id")
     */
    protected $course;
}

学院课程表

 $builder->add('institute','entity', array(
                    'class'=>'PNC\InstitutesBundle\Entity\Institutes',
                    'property'=>'name',
                    'label' => 'Institute'
                )
            )
  ->add('course', 'genemu_jqueryselect2_entity', array(
                'class' => 'PNC\CoursesBundle\Entity\Courses',
                'property' => 'courseTitle',
                'multiple' => true,
                'attr' => array(
                    'class' => 'form-control'
                )
            ))

            ->add('save', 'submit', array(
                'label' => 'Save and Return to List',
                'attr' => array(
                    'class' => 'btn btn-success'
                )
            ));

和控制器

  public function newAction(Request $request){
        $em = $this->getDoctrine()->getManager();
        $course = new Courses();
        $institutesCourses = new InstitutesCourses();
        $form = $this->createForm(new InstitutesCoursesType(), $institutesCourses, array(
            'action' => $this->generateUrl('instituteCourses_create'),
            'method' => 'POST',
        ));
        if ($request->getMethod() == 'POST')
        {
            $form->handleRequest($request);
            if ($form->isSubmitted() && $form->isValid()) {
                $data = $form->getData();
                $selectedTag = $form['course']->getData();
                if( $selectedTag != null ){
                    $array = $selectedTag->toArray();
                    $length = count($array);
                    for ($i = 0; $i < $length; $i++) {
                        $course = $em->getRepository('PNCCoursesBundle:Courses')->getCoursesByCourseTitle($array[$i]);
                        $institutesCourses->setCourse($course);
                        $em->persist($institutesCourses);
                    }

                }
                $em->flush();
            }
        }

和回购功能 公共函数 getCoursesByCourseTitle($criteria) {

$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder->select('c')
    ->from('PNCCoursesBundle:Courses', 'c')
    ->Where('c.courseTitle = :q')
    ->setParameter('q', '%'.$criteria.'%');
return $queryBuilder;

}

虽然保存它说提示。 **

在关联中找到类型为 Doctrine\ORM\QueryBuilder 的实体 PNC\InstitutesBundle\Entity\InstitutesCourses#course,但期待 PNC\CoursesBundle\Entity\Courses

**

【问题讨论】:

    标签: php entity-framework symfony orm doctrine-orm


    【解决方案1】:

    Institute 和 Course 实体没有直接关系。 您可能希望使用 Join 表定义多对多关系。

    类似:

    class Courses {
    
    /**
     * @ManyToMany(targetEntity="PNC\InstitutesBundle\Entity\Institutes")
     * @JoinTable(name="institutes_courses",
     *      joinColumns={@JoinColumn(name="institute_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="course_id", referencedColumnName="id", unique=true)}
     *      )
     */
    private $institutes;
    }
    

    与机构实体相反。

    http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-unidirectional-with-join-table

    【讨论】:

    • 我知道这一点,但我在桥接表中有更多额外字段,这就是我使用自定义方式的原因......
    猜你喜欢
    • 2018-10-22
    • 1970-01-01
    • 2023-03-08
    • 2012-10-05
    • 2019-05-25
    • 2021-11-08
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多