【问题标题】:Doctrine Many to Many Query to get other side dataDoctrine 多对多查询以获取其他方面的数据
【发布时间】: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


【解决方案1】:
 $repository = $em->getRepository('PNCCoursesBundle:Courses');
                $courses = $repository->createQueryBuilder('i')
                    ->innerJoin('i.institutes', 'g')
                    ->where('g.id = :inst_id')
                    ->setParameter('inst_id',$instituteID)
                    ->getQuery()->getResult();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多