教义和没有新鲜的关系

时间:2011-06-16 15:54:14

标签: php doctrine

我在Doctrine(1.2.4)中看到了意想不到的缓存效果。

我有几个由以下YAML定义的相关表(删除了示例中未使用的其他几个字段)。从学生到学校只是一个简单的1-Many关系。

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(); }

(我已经设置了数据库,以便提供另一个有效的学校ID)。

如果我现在,立即尝试访问我将获得旧学校名称的关系。我理解这一点 - 因为我没有调用refreshRelated()。我发现意外的是,如果我立即再次查询重复第一个

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

并获得其结果

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

当我检查我的数组的内容时,我发现在这两种情况下,我有相同的学校名称。换句话说,即使我已经完成了第二个查询并且正在查看查询结果,关系也不会刷新。

数据库中的数据很好且一致;即适当的学生和学校。例如。第二次运行上述序列 - 在不同的程序执行中 - 使用另一个学校名称(虽然再次重复)。

这个缓存来自哪里?

1 个答案:

答案 0 :(得分:11)