Php 如何在DQL查询中访问相关实体的属性(原则2)?

Php 如何在DQL查询中访问相关实体的属性(原则2)?,php,doctrine-orm,foreign-key-relationship,dql,Php,Doctrine Orm,Foreign Key Relationship,Dql,我在学校实体和学生实体之间建立了多对一关系,我使用多对一关系将两者联系在一起 学生实体: /** * @var \Doctrine\Common\Collections\Collection * @ManyToOne(targetEntity="Schools", inversedBy="Students") * @JoinColumn(name="school_id", referencedColumnName="school_id") */ private $Schools; /*

我在学校实体和学生实体之间建立了多对一关系,我使用多对一关系将两者联系在一起

学生实体:

/**
 * @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;
学校实体:

/**
 * @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;
这正如预期的那样有效

我试图为指定学校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属性访问学校id,但这会引发错误

作为一个临时修复,我在学生实体中创建了一个$schoolId属性,并改用它,但这肯定不是正确的方法

谢谢你的帮助

更新

我通过改变线路使它工作

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

但是,相同的方法不适用于以下查询:

$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. 

实体声明中有
school\u id
,查询中有
school id
。检查您的
学校
班级是否有$schoolId参数,而不是
$School\u id
。另外,您有
student\u id
参数,但您设置了
group\u id
。你确定吗?school_id和school id之间的区别只是我的参数命名约定,如果混淆了,我深表歉意。在这里写问题时,组id是一个拼写错误,在原始代码中不存在,因此我在这里进行了更正。我不认为这是命名约定:)。您是否在
School
类中有
@列的
schoolId
属性?这很重要,因为在您的查询中,您正在使用它:
't.Schools.schoolId
,但是您的
Students
条目清楚地表明,您的DB字段名为
school\u id
是的,我在学校课堂上有以下内容:我稍后会尝试查看,现在指尖没有教义2