Как получить доступ к свойствам связанной сущности в запросе DQL (Doctrine 2)? - PullRequest
1 голос
/ 17 августа 2011

Я установил отношения "один к одному" между объектом школы и объектом учащихся, я связал их вместе, используя отношение manyToOne;

Элемент учащихся:

/**
 * @var \Doctrine\Common\Collections\Collection
 * @ManyToOne(targetEntity="Schools", inversedBy="Students")
 * @JoinColumn(name="school_id", referencedColumnName="school_id")
 */
private $Schools;

Сущность школы:

/**
 * @var \Doctrine\Common\Collections\Collection
 * @OneToMany(targetEntity="Students", mappedBy="Schools")
 */
private $Students;

Это работает, как и ожидалось.

Я пытаюсь написать запрос для таблицы учеников, в которой указывается school_idно я не знаю, как указать это в запросе;

$qb->select('t.position')
    ->from('\Entities\Students', 't')
    ->where($qb->expr()->eq('t.studentId', ':student_id'))
    ->andWhere($qb->expr()->eq('t.Schools.schoolId', ':school_id')) // doesn't work
    ->setParameters(array('student_id' => $this->studentId, 'school_id' => $school_id));

Я пытался получить доступ к школьному идентификатору через свойство $ Schools, которое я установил в личности учащегося, но это выдает ошибку.

В качестве временного исправления я создал свойство $ schoolId в сущности «Студенты» и использую его вместо этого, но, конечно, это неправильный способ сделать это.

Оцените помощь.

ОБНОВЛЕНИЕ

Я получил его, изменив строку;

->andWhere($qb->expr()->eq('t.Schools.schoolId', ':school_id')) // doesn't work

Кому:

->andWhere($qb->expr()->eq('t.Schools', ':school_id'))

Однако то же самоеподход не работает со следующим запросом:

$qb->select('DISTINCT t.age, s.Schools') // Doesn't work
    ->from('\Entities\Schools', 't')
    ->innerJoin('t.Students', 's')

Следующая ошибкаили отображается:

[Semantical Error] line 0, col 28 near 'Schools FROM': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 
...