Результат запроса доктрины Symfony и выполнение функции - PullRequest
1 голос
/ 24 сентября 2010

У меня есть запрос на доктрину в Symfony. Он возвращает много строк, когда я запускаю код mysql, сгенерированный этим запросом dql в phpBB, но когда я запускаю его в symfony и получаю доступ к его результатам с помощью этого кода:

foreach ($this->courses as $course){
 echo "<br>".$course->firstname;}

возвращает только одно имя. Также, когда я пытаюсь получить $ course-> title , появляется эта ошибка Неизвестное свойство записи / связанный компонент "title" в "Студентах"

Запрос:

$q= Doctrine_Query::create()
         ->select('s.firstname,
                  s.middlename,
                  s.lastname,
                  p.program,
                  c.title,
                  pc.year')
         ->from('Students s')
         ->leftJoin('s.Programs p')
         ->leftJoin('p.Programcourses pc')
         ->leftJoin('pc.Courses c')
         ->where("idstudents = ?",2);
$this->courses=$q->execute();

schema.yml:

    Courses:
  connection: doctrine
  tableName: courses
  columns:
    idcourses:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    title:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    Programcourses:
      local: idcourses
      foreign: idcourses
      type: many
Programcourses:
  connection: doctrine
  tableName: programcourses
  columns:
    idprogramcourses:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    idprograms:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    idcourses:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    year:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    Courses:
      local: idcourses
      foreign: idcourses
      type: one
    Programs:
      local: idprograms
      foreign: idprograms
      type: one
Programs:
  connection: doctrine
  tableName: programs
  columns:
    idprograms:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    program:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    Programcourses:
      local: idprograms
      foreign: idprograms
      type: many
    Students:
      local: idprograms
      foreign: idprograms
      type: many
Roles:
  connection: doctrine
  tableName: roles
  columns:
    idroles:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: false
    role:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
Students:
  connection: doctrine
  tableName: students
  columns:
    idstudents:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    firstname:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    middlename:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    lastname:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    idprograms:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    session:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    username:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    password:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    email:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
  relations:
    Programs:
      local: idprograms
      foreign: idprograms
      type: one
Teachers:
  connection: doctrine
  tableName: teachers
  columns:
    idteachers:
      type: integer(4)
      fixed: false
      unsigned: false
      primary: true
      autoincrement: true
    firstname:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    lastname:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    username:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    password:
      type: string(45)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    email:
      type: string(255)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false

Ответы [ 4 ]

4 голосов
/ 26 сентября 2010

вот как я это получу ...

$q= Doctrine_Query::create()
     ->select('s.firstname,
              s.middlename,
              s.lastname,
              p.program,
              c.title,
              pc.year')
     ->from('Students s')
     ->leftJoin('s.Programs p')
     ->leftJoin('p.Programcourses pc')
     ->leftJoin('pc.Courses c')
     ->where("idstudents = ".$studentid);

//$this->query=$q->getSqlQuery();
$q->setHydrationMode(Doctrine_Core::HYDRATE_SCALAR);
$this->Student=$q->execute(array());

и в шаблоне

<?php foreach ($Student as $student): ?>
<tr>
  <td><?php echo $i; ?></td>
  <td><?php echo $student['c_title'] ?></td>
  <td><?php echo $student['pc_year'] ?></td>
  <td><?php echo $student['p_program'] ?></td>
</tr>
<?php endforeach; ?>
2 голосов
/ 26 сентября 2010

Ваш верхний узел - это объект Students, потому что вы используете Students в from()

Ваша ошибка опишите это

Также, когда я пытаюсь получить $course->title, эта ошибка появляется Unknown record property / related component "title" on "Students"

потому что у вас есть Students объект, а не Courses (которому принадлежит title)

Вы путаете себя, используя

$ this-> Курсы = $ q-> Execute ();


$q= Doctrine_Query::create()
 ->select('s.firstname,
          s.middlename,
          s.lastname,
          p.program,
          c.title,
          pc.year')
 ->from('Students s')
 ->leftJoin('s.Programs p')
 ->leftJoin('p.Programcourses pc') 
 ->leftJoin('pc.Courses c')
 ->where("idstudents = ?", $studentid); // beware to SQL injection, use parameters

$this->Student=$q->fectchOne(); // as you are only retrieve one in your where clause
$this->Student=$q->execute()->getFirst(); // same

<tr>
  <td><?php echo $i; /* not sure what this is for */ ?></td>
  <td><?php echo $Student->Programs->Programcourses->Courses->title ?></td>
  <td><?php echo $Student->Programs->Programcourses->year ?></td>
  <td><?php echo $Student->Programs->program ?></td>
</tr>

Если вы хотите, чтобы Courses был верхом, просто выберите что-то вроде:

$q= Doctrine_Query::create()
 ->select('s.firstname,
          s.middlename,
          s.lastname,
          p.program,
          c.title,
          pc.year')
 ->from('Courses c')
 ->leftJoin('c.Programcourses pc') 
 ->leftJoin('pc.Programs p')
 ->leftJoin('p.Students s')
 ->where("s.idstudents = ?", $studentid); 
1 голос
/ 24 сентября 2010

Несколько вещей:

  • Вместо $ course-> firstname и $ course-> title вам нужны $ course-> getFirstName () и $ course-> getTitle ().
  • Вы должны использовать имена единственного числа для своих таблиц вместо множественного числа, например, Курс вместо Курсов.
  • В symfony принято использовать «id» для имени первичного ключа вместо того, что вы делаете..

Исправьте эти проблемы - особенно первую - и ваша общая проблема должна исчезнуть.

0 голосов
/ 07 октября 2016

Подготовьте запрос следующим образом:

public function getAttendanceRecord($employeeId, $date) {
try {
    $query = Doctrine_Query::create()
            ->from("attendanceRecord")
            ->where("employeeId = ?", $employeeId);
    $records = $query->execute();
    if (is_null($records[0]->getId())) {
        return null;
    } else {
        return $records;
    }
} catch (Exception $ex) {
    throw new DaoException($ex->getMessage());
}

}

И попробуйте получить / напечатать как это:$ parameters ['employeeId'], $ parameters ['date']) -> toArray ();эхо '';print_r ($ punchInTImeOfTheDay);выход ();

...