0

在将 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);
}

在第二个版本中,我可以获得一致的结果。

所以我的问题是:为什么我不能用这两个函数得到相同的结果?当我使用外键获取器时,如何确保我的记录是最新的?

4

1 回答 1

0

Doctrine 允许刷新记录的 relashionships,如doc中所述。这将如下所示:

$this->refreshRelated();
foreach($this->getActivities() as $activity){
    ....
}

另请参阅有关堆栈溢出的这篇文章。

于 2014-05-07T14:50:37.897 回答