Как использовать много-к-одному ассоциации в Учении 2 - PullRequest
3 голосов
/ 18 июля 2011

Я использую Doctrine 2 в Zend.

Я пытаюсь выяснить, как получить доступ к свойствам / методу для связанных моделей из текущего объекта.

Например, мыу меня две таблицы: «Школы» и «Учащиеся».

Многие учащиеся принадлежат к какой-либо школе, поэтому это отношение «многие к одному» , и меня интересует только перечисление всех учащихся для каждой школы.Я не хочу запрашивать записи учеников, чтобы найти информацию о школе, к которой они принадлежат, поэтому это классифицируется как однонаправленное отношение.

Теперь, чтобы настроить многие к одному связь в Doctrine 2 между таблицами, которую я добавил бы в сущности Студенты, поскольку это сторона-владелец :

/**
 * @ManyToOne(targetEntity="Schools")
 * @JoinColumn(name="school_id", referencedColumnName="school_id")
 */
private $schoolId;

Где значения имен соответствуют именам столбцовв таблице учеников и в таблице школ соответственно.

Так что, если у меня есть объект записи школы, как я могу получить доступ к свойствам / методам ученика?

echo $oSchool->Students->getName(); // doesn't work

Я не могу понять, что я сделал неправильно, создается прокси-класс.Цените это, если кто-нибудь мог указать мне правильное направление.

Ответы [ 3 ]

6 голосов
/ 19 июля 2011

В сущности «Школы» вы хотите иметь что-то вроде этого

/**
 * @param \Doctrine\Common\Collections\Collection $property
 * @OneToMany(targetEntity="Students", mappedBy="school")
 */
private $student;

public function __construct() {
    $this->student = new \Doctrine\Common\Collections\ArrayCollection();
}

public function getStudent() {
    return $this->student;
}

С этим вы можете сделать что-то вроде следующего, что даст вам ArrayCollection со всеми объектами ученика

$studentsArray = $school->getStudent();

Надеюсь, это поможет ... Docrine 2 очень мощная, но некоторые вещи не очень хорошо документированы.Еще немного информации об этом в Документации на Работа с Ассоциациями .

1 голос
/ 14 июля 2014

Для тех, кто сталкивается с этой проблемой: «Неустранимая ошибка: вызов функции-члена setValue () для необъекта в C: \ xampplite \ htdocs \ test \ library \ Doctrine \ ORM \ PersistentCollection.php в строке 168 -»

Решение: Необходимо заменить значение mappedBy значением свойства doctrine вместо имени столбца таблицы

Пример:

Правильный синтаксис: @ORM \ OneToMany (targetEntity = "Test \ Entity \ School", mappedBy = "school")

Неверный синтаксис: Правильный синтаксис: @ORM \ OneToMany (targetEntity = "Test \ Entity \ School", mappedBy = "school_id")

0 голосов
/ 19 июля 2011

Я добился определенного прогресса. Я прочитал раздел ' Работа с объектами ' в документации Доктрины 2.

Связанные объекты могут быть доступны примерно так (в соответствии с примером, приведенным в моем вопросе):

$oStudent->getSchoolId()->getName(); // gets a student's school's name by traversing the school class

Однако в своем оригинальном вопросе я хотел получить доступ к ученикам, принадлежащим к школе, через объект школы. Я совершенно озадачен тем, как это сделать, мне кажется, это невозможно.

...