Doctrine2 - 使用什么DQL?

时间:2014-06-13 10:19:56

标签: join doctrine-orm dql

第一个名为BUNDLE

的实体
/**
 * @var \Doctrine\Common\Collections\Collection of \Akademie\Course\Course
 * @ManyToMany(targetEntity="Akademie\Course\Course", mappedBy="bundles")
 */
private $courses;

第二个实体名为COURSE

/**
 * @var \Doctrine\Common\Collections\Collection of \Akademie\Bundle\Bundle
 * @ManyToMany(targetEntity="Akademie\Bundle\Bundle", inversedBy="courses")
 */
    private $bundles;

/**
 * @var \Doctrine\Common\Collections\Collection of \Akademie\Course\CourseDate
 * @OneToMany(targetEntity="Akademie\Course\CourseDate", mappedBy="course")
 */
    private $courseDates;

/**
 * @var int
 * @Column(type="boolean")
 */
    private $hidden;

,第三个名为COURSEDATE

/**
 * @var \Akademie\Course\Course
 * @ManyToOne(targetEntity="Akademie\Course\Course", inversedBy="courseDates")
 * @JoinColumn(nullable=false)
 */
    private $course;

/**
 * @var \DateTime
 * @Column(type="datetimetz", nullable=true)
 */
    private $beginDate;

我有参数course,我需要获取所有bundles,其中包含此course。更重要的是,courses中的所有其他bundle必须比当前日期更新courseDate,并且不能隐藏。否则我不想得到这个包。我希望现在很清楚......

1 个答案:

答案 0 :(得分:0)

在存储库(例如实体BUNDLE包)中,您必须创建自定义方法:

public function myMethod($course){
        $qb = $this->createQueryBuilder("b")
                       ->join("b.course", "c")
                       ->join("c.courseDates", "cd")
                       ->Where("c = :course")
                       ->andWhere(" cd.beginDate > :now ")
                       ->andWhere("c.hidden = 1")// if 1 means not hidden
                       ->setParameter(":course", $course)
                       ->setParameter(":now", new \DateTime('now'));

然后,在你的控制器中,你必须做类似的事情:

$bundles = $this->getDoctrine()->getManager()->getRepository('namespace of your BUNDLE entity')->myMethod($course);