我在使用Doctrine 1.2.4与Symfony时遇到了意外行为:通过getter访问记录并没有导致与查询相同的结果来检索这些相同的记录。这是怎么回事:
我正在使用两个表:一个tpTrip表,我们在其上执行操作(=状态更改),以及一个tpTripActivity表,用于跟踪已对行程执行的所有操作。 tpTrip有一对多的关系指向tpTripActivity。
在某些时候,我想知道是否对tpTrip记录执行了“CheckIn”操作。所以在我的Doctrine tpTrip类中,我编写了(天真)方法:
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);
}
在第二个版本中,我可以获得一致的结果。
所以我的问题是:为什么我不能用这两个函数得到相同的结果?当我使用外键吸气剂时,如何确保我的记录是最新的?