在将 Doctrine 1.2.4 与 Symfony 一起使用时,我遇到了一个意外的行为:通过 getter 访问记录并不会导致与执行查询以检索这些相同的记录相同的结果。这是怎么回事:
我正在使用两个表:一个 tpTrip 表,我们在其上执行操作(= 状态更改),以及一个 tpTripActivity 表,它跟踪在旅途中执行的所有操作。tpTrip 具有指向 tpTripActivity 的一对多关系。
在某些时候,我想知道是否对 tpTrip 记录执行了“签入”操作。所以在我的 Doctrine tpTrip 类中,我写了(naive)方法:
public function has_been_checked_in()
{
foreach($this->getActivities() as $activity)
{
if($activity->getAction() == "CheckIn") return true;
}
return false;
}
现在经过一些挫折,观察到最近执行的 CheckIn 操作没有出现在我的结果中,我编写了以下函数,我希望这样做:
public function has_been_checked_in2()
{
$total = Doctrine_Core::getTable("tpTripActivity")->createQuery("a")
->select("count(*)")
->where("trip_id = ?", $this->getId())
->andWhere("action = ?", "CheckIn")
->fetchOne(array(), Doctrine_Core::HYDRATE_SINGLE_SCALAR);
return ($total > 0);
}
在第二个版本中,我可以获得一致的结果。
所以我的问题是:为什么我不能用这两个函数得到相同的结果?当我使用外键获取器时,如何确保我的记录是最新的?