エンティティ内のTeacher
とStudent
の関係を定義したとします。この場合、オブジェクトを取得するには、$teacher->getStudents()
(Teacher
エンティティクラスでこのようなメソッドを定義したものとします)を呼び出します。あなたがそのような何かを追加することにより、$teacher->getStudents()
通話の追加クエリの必要性を回避することができますQueryBuilder
オブジェクトで
<?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;
// ...
}
:1対多の関係のためのDoctrine documentation about association mapping
例を参照してください
$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();
}
FurthmoreあなたはTeacherRepository
オブジェクトを介してQueryBuilder
オブジェクトを作成した場合from()
メソッドを呼び出す必要はありません。
$query = $teacher
->createQueryBuilder('t')
->join('t.students', 's')
->select(array('t', 's'))
->getQuery()
->getResult();
}
のコメントを取得したいとします) 'メソッドは、移入する必要があるエンティティのエイリアスを定義するだけです。可能な解決策については、私の答えをご覧ください。 – W0rma