2013-08-22 77 views
0

在Symfony中使用Doctrine 1.2.4时,我遇到了意想不到的行为:通过getter访问记录没有导致与拍摄查询以检索这些相同记录相同的结果。这是怎么回事:Doctrine 1.2.4中的记录同步问题

我正在处理两个表:一个tpTrip表,我们在其上执行操作(=状态更改),和一个tpTripActivity表,跟踪所有已执行的操作行程。 tpTrip具有指向tpTripActivity的一对多关系。

在某些时候,我想知道是否在tpTrip记录上执行了“签入”操作。所以在我的学说tpTrip类,我写的(幼稚)方法:

public function has_been_checked_in() 
{    
    foreach($this->getActivities() as $activity) 
    {   
     if($activity->getAction() == "CheckIn") return true; 
    } 
    return false; 
} 

现在一些挫折后,指出最近进行的签入的动作并没有在我的结果转向了,我写了下面的功能,这是我预计会这样做:

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

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

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

回答

0

doc中所述,主义允许刷新记录的关系。这将如下:

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

另请参见this张贴堆栈溢出。