我假设您已经定义了实体之间Teacher
和Student
实体中的关系。在这种情况下,您可以Student
通过调用来获取对象$teacher->getStudents()
(假设您已经在Teacher
实体类中定义了这样的方法)。请参阅有关关联映射的 Doctrine 文档
一对多关系的示例:
<?php
use Doctrine\Common\Collections\ArrayCollection;
/** @Entity */
class Teacher
{
// ...
/**
* One Teacher has Many Students.
* @OneToMany(targetEntity="Student", mappedBy="teacher")
*/
private $students;
// ...
public function __construct() {
$this->students = new ArrayCollection();
}
}
/** @Entity */
class Student
{
// ...
/**
* Many Students have One Teacher.
* @ManyToOne(targetEntity="Teacher", inversedBy="students")
* @JoinColumn(name="teacher_id", referencedColumnName="id")
*/
private $teacher;
// ...
}
在QueryBuilder
对象中,您可以通过添加以下内容来避免对$teacher->getStudents()
调用进行额外查询:
$query = $em
->createQueryBuilder('t')
->from('AppBundle:Teacher','t')
->join('AppBundle:Student','s')
->select(array('t', 's'))
->where('t.id=id and s.tid=tid')
->getQuery()
->getResult();
}
如果如上所述在您的实体之间Teacher
和实体中定义了关系,您甚至可以简化连接:Student
$query = $em
->createQueryBuilder('t')
->from('AppBundle:Teacher','t')
->join('t.students', 's')
->select(array('t', 's'))
->getQuery()
->getResult();
}
此外,如果您通过对象创建对象,则无需调用该from()
方法:QueryBuilder
TeacherRepository
$query = $teacher
->createQueryBuilder('t')
->join('t.students', 's')
->select(array('t', 's'))
->getQuery()
->getResult();
}