Как создать функцию, которая запрашивает другую таблицу для объекта Entity в Doctrine 2 - PullRequest
2 голосов
/ 20 июля 2011

У меня есть классы школ и студентов. Сущность «ученики» содержит свойство schoolId, указывающее, к какой школе принадлежит студент.

В классе репозитория Schools я хочу создать функцию, которая будет возвращать коллекцию объектов учеников, принадлежащих этой школе, поэтому я хочу иметь возможность вызывать эту функцию следующим образом:

$oSchool->getStudents();

Однако я не уверен, что наличие функции в хранилище - лучшее место, потому что до сих пор все примеры, с которыми я сталкивался, вызывают функцию из хранилища следующим образом:

$aStudents = $em->getRepository('\Entities\Schools')->getStudents();

Это не относится к текущему объекту школы. Я предполагаю, что мне нужно будет сослаться на текущий школьный объект в функции, я не уверен, как это сделать. В настоящее время моя функция в репозитории школ выглядит так:

public function getStudents()
{
    // get instance of entity manager
    $em = $this->getEntityManager();

    // how do i specify the id of the school object that is calling this function?
    $query = $em->createQuery('SELECT s FROM \Entities\Students WHERE s.SchoolId = ?'); 

    $aStudents = $query->getResult();

    return $aStudents;
}   

Искренне ценю любую помощь.

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

Посмотрите на: Отображения метаданных для наших сущностей

Особенно @OneToMany в классе User.Это в основном то же самое, что и отношения между школой и учеником.

Также обязательно взгляните на: 25.9.Не отображать внешние ключи в поля в сущности

2 голосов
/ 20 июля 2011

просто добавьте атрибут $students к вашей школьной сущности (что делает ассоциацию двунаправленной).Тогда вы можете просто позвонить $yourSchool->getStudents()

См .: http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / association-mapping.html

...