在Doctrine 1.2.4中记录同步问题

时间:2013-08-22 15:59:00

标签: php symfony doctrine

我在使用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);
}

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

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

1 个答案:

答案 0 :(得分:0)

Doctrine允许更新记录'关系,如doc中所述。这将如下:

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

另请参阅有关堆栈溢出的this帖子。