Doctrine2 - 得到没有隐藏人的小组

时间:2014-06-10 16:43:01

标签: sql doctrine-orm memberof

第一个名为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)

我不熟悉MEMBER OF,但我认为你最好使用INNER JOIN

DQL:

SELECT group
FROM path\to\entity\Group group
INNER JOIN group.persons person
INNER JOIN person.city city
WHERE person.hidden = FALSE AND city.name = :name

QueryBuilder的:

$em->createQueryBuilder()
    ->select('group')
    ->from('path\to\entity\Group', 'group')
    ->innerJoin('group.persons', 'person')
    ->innerJoin('person.city', 'city')
    ->where('person.hidden = FALSE')
    ->andWhere('city.name = :name')
    ->setParameter('name', $yourName)
    ->getQuery()->getResult();

我假设您的个人实体有一个名为hidden的属性,并且您的人 - 城市关系是双向的。