2013-08-22 82 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張貼堆棧溢出。