第一个名为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
,并且不能隐藏。否则我不想得到这个包。我希望现在很清楚......
答案 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
的属性,并且您的人 - 城市关系是双向的。