Какой запрос я бы использовал для этого - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть таблица Relationship, которая связывает учителей со студентами

Teacher   Student
1         1
1         2
2         1 
2         3

В таблице Students содержатся конкретные данные об учениках

Id    Date of birth   First Name
1     1990-10-10      Bill Smith
2     1989-01-03      Adam Smithson

Я хочу выбрать всех учеников, которые являются учениками учителя 1. Сейчас я делаю это (это синтаксис ORM propel).

$relationships = RelationshipQuery::create()->filterByTeacher($teacherid)->find();

foreach($relationships as $relationship){
  $studentId = $relationship->getStudent();

  //use the studentId to get the actual student object
  $student = StudentQuery::create()->findPk($studentId);

  //after I get the student, I add it to an array
  $students[] = $student;
}

Проблема в том, что я получаю массив, а не обычную коллекцию propelCollection, с которой мы сталкиваемся, когда делаем нормальный ->find(). Есть ли способ немного очистить этот запрос (использовать соединения или что-то в этом роде), чтобы я с самого начала получал коллекцию PropelCollection?

1 Ответ

0 голосов
/ 14 апреля 2011

Вы должны определить свою схему для отношения следующим образом: http://www.propelorm.org/wiki/Documentation/1.5/Relationships#Many-to-ManyRelationships

Код, который вы запрашиваете, очень прост:

$teacher = TeacherQuery::create()->findOneById($teacherId);
$students = $teacher->getStudents(); //Your students collection
...