У меня есть база данных с 3 таблицами.Это простые отношения НМ.Student, Course и StudentHasCourse для управления отношениями NM.Я выкладываю schema.yml для справки, но в этом нет необходимости.
Course:
connection: doctrine
tableName: course
columns:
id:
type: integer(4)
fixed: false
unsigned: false
primary: true
autoincrement: false
name:
type: string(45)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
relations:
StudentHasCourse:
local: id
foreign: course_id
type: many
Student:
connection: doctrine
tableName: student
columns:
id:
type: integer(4)
fixed: false
unsigned: false
primary: true
autoincrement: false
registration_details:
type: string(45)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
name:
type: string(30)
fixed: false
unsigned: false
primary: false
notnull: false
autoincrement: false
relations:
StudentHasCourse:
local: id
foreign: student_id
type: many
StudentHasCourse:
connection: doctrine
tableName: student_has_course
columns:
student_id:
type: integer(4)
fixed: false
unsigned: false
primary: true
autoincrement: false
course_id:
type: integer(4)
fixed: false
unsigned: false
primary: true
autoincrement: false
result:
type: string(1)
fixed: true
unsigned: false
primary: false
notnull: false
autoincrement: false
relations:
Course:
local: course_id
foreign: id
type: one
Student:
local: student_id
foreign: id
type: one
Затем я получаю данные из таблиц в executeIndex () из следующего запроса.
$q_info = Doctrine_Query::create()
->select('s.*, shc.*, c.*')
->from('Student s')
->leftJoin('s.StudentHasCourse shc')
->leftJoin('shc.Course c')
->where('c.id = 1');
$this->infos = $q_info->execute();
Затем я обращаюсь к данным, просматривая indexSuccess.php.Но в indexSuccess я могу получить доступ только к данным из таблицы Student.
<?php foreach ($infos as $info): ?>
<?php echo $info->getId(); ?>
<?php echo $info->getName(); ?>
<?php endforeach; ?>
Я ожидал, что смогу получить доступ к данным StudentHasCourse и данным курса, как показано ниже.Но он генерирует ошибку.
<?php echo $info->getStudentHasCourse()->getResult()?>
<?php echo $info->getStudentHasCourse()->getCourse()->getName()?>
Первый оператор выдает предупреждение;
Предупреждение: call_user_func_array () ожидает, что параметр 1 является допустимым обратным вызовом, класс 'Doctrine_Collection'не имеет метода 'getCourse' в D: \ wamp \ bin \ php \ php5.3.5 \ PEAR \ pear \ symfony \ escaper \ sfOutputEscaperObjectDecorator.class.php в строке 64
и второйинструкция выдает вышеупомянутое предупреждение и следующую ошибку:
Неустранимая ошибка: вызов функции-члена getName () для необъекта в D: \ wamp \ www \ sam \ test_doc_1 \ apps \ frontend\ modules \ registration \ templates \ indexSuccess.php в строке 5
Когда я проверяю запрос на панели инструментов отладки, он выглядит следующим образом и выдает все необходимые данные.
SELECT s.id AS s__id, s.registration_details AS s__registration_details, s.name AS s__name, s2.student_id AS s2__student_id, s2.course_id AS s2__course_id, s2.result AS s2__result, c.id AS c__id, c.name AS c__name
FROM student s LEFT JOIN student_has_course s2 ON s.id = s2.student_id LEFT JOIN course c ON s2.course_id = c.id
WHERE (c.id = 1)
Хотя вопрос короткий, поскольку вся упомянутая информация стала такой длинной.Это очень ценно, если кто-то может помочь мне решить эту проблему.Что мне нужно, так это получить доступ к данным из StudentHasCourse и Course.Если эти данные и этот запрос недоступны для этих данных, любая другая методология также приветствуется.