【发布时间】:2016-05-11 02:35:23
【问题描述】:
institute 和“课程”之间有很多关系。
class Institutes {
/**
* @ORM\ManyToMany(targetEntity="PNC\CoursesBundle\Entity\Courses", inversedBy="institutes")
* @ORM\JoinTable(name="institute_courses",
* joinColumns={@ORM\JoinColumn(name="institute_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="course_id", referencedColumnName="id")}
* )
*/
protected $courses;
}
class Courses {
/**
* @ORM\ManyToMany(targetEntity="PNC\InstitutesBundle\Entity\Institutes", mappedBy="courses")
*/
protected $institutes;
}
我制作了一个表格,可以一次性为一个机构分配多个课程,它很有效。现在我想通过学说查询获得分配给研究所的课程列表,我有以下查询,但 id 不起作用。
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('PNCInstitutesBundle:Institutes');
$query = $repository->createQueryBuilder('i')
->innerJoin('i.courses', 'g')
->where('i.id = :inst_id')
->setParameter('inst_id',3)
->getQuery()->getResult();
【问题讨论】:
-
通常在学说中我发现用它们之间的桥接表建立 2 多对一关系要容易得多,所以 3 个类而不是 2 个,其中两个是 ManyToOne,一个是第三个类OneToMany 到其他两个。
-
在这个连接中 '->innerJoin('u.courses', 'g')' - 鉴于别名 'u' 没有在任何地方定义(它应该连接 'i' 别名),我认为您的示例甚至不会编译。 - 它应该是 '->innerJoin('i.courses', 'g')'
标签: php symfony doctrine-orm doctrine query-builder