Доктрина и необновленные отношения

Я наблюдаю неожиданный эффект кеширования в Doctrine (1.2.4).

У меня есть пара связанных таблиц, определенных следующим YAML (несколько дополнительных полей, не используемых в примере, удалены). Просто простая связь 1-Многие от учеников к школам.

School:
  tableName: tblschool
  columns:
    sch_id:
      name: sch_id as id
      primary: true
      autoincrement: true
      type: integer(4)
    sch_name:
      name: sch_name as name
      type: string(50)
Student:
  tableName: tblstudent
  columns:
    stu_id:
      name: stu_id as id
      primary: true
      autoincrement: true
      type: integer(4)
    stu_sch_id:
      name: stu_sch_id as school_id
      type: integer(4)
  relations:
    School:
      local: school_id
      foreign: id
      foreignAlias: Students

Я могу создать простой запрос Doctrine (1.2.4), чтобы вернуть ученика с

  $result1 = Doctrine_Query::create()
           ->from('Student s')
           ->where('s.id = 1')
           ->execute();

, а затем извлечь соответствующее название школы с помощью

foreach ($result1 as $result) { $ans[] = $result->School["name"]; }

Я сейчас измените school_id (который вызывает взаимосвязь), выполнив это с помощью:

foreach ($result1 as $result) 
   { $result["school_id"] = 1 - $result["school_id"]; $result->save(); }

(я настроил БД так, чтобы это давало другой действительный идентификатор школы).

Если бы я должен был сейчас, немедленно, попробуйте получить доступ к взаимосвязи Я получу название старой школы. Я понимаю это - это потому, что я не вызывал refreshRelated (). Что я нахожу неожиданным, так это то, что если я немедленно сделаю другой запрос, дублирующий первый

  $result2 = Doctrine_Query::create()
           ->from('Student s')
           ->where('s.id = 1')
           ->execute();

и получу его результат

foreach ($result2 as $result) { $ans[] = $result->School["name"]; }

, когда я исследую содержимое моего массива, я обнаружу, что в обоих случаях , у меня есть то же название школы. Другими словами, хотя я выполнил второй запрос и смотрю на результат запроса, связь не обновляется.

Данные в базе данных в порядке и согласованы; т.е. соответствующие ученики и школы существуют. Например. повторное выполнение указанной выше последовательности - в другой программе - использует другое название школы (хотя и повторяется).

Откуда берется это кеширование?

7
задан borrible 16 June 2011 в 15:54
поделиться