2010-03-22 50 views

回答

3

我敢肯定,學說(至少1.2版本)版本化行爲沒有按除revert()之外,不爲您的模型定義任何其他方法,允許您恢復以前版本的資源。

所以你必須自己做一切。

+0

是啊,這就是我的想法。儘管感謝您的幫助。 – jjbohn 2010-03-23 17:33:42

+0

我在下面張貼了另一種方式。你認爲這是Symfony的具體情況,並不是在純粹的教義中可用? – Tapper 2012-07-18 09:45:41

1

您可以在版本表上查詢: Doctrine :: getTable('EntityVersions') - > findAllById($ entity_id);

gyaan:對於任何版本表,PK共同放置在版本號&版本上。不像默認的教條樣式,沒有代理鍵!

0

只是爲了防止其他人絆倒在這:這是一個快速解決方案如何獲取版本化的記錄。 (這當然應該更好地進行內部或作爲「審計日誌」類的擴展實現,但對於一個快速的解決方案下面可以去任何地方。)

/** 
* get collection of versioned records as array 
* 
* @param string $table table name without the 'Version' -suffix (e.g. 'User' instead of 'UserVersion') 
* @param mixed $id simple id or array with key/value pairs for compound keys 
* @return array 
*/ 
public function getHistory($table, $ids) { 

    $className = $table . 'Version'; 

    $identifiers = (array) Doctrine_Core::getTable($table)->getIdentifier(); 
    if (count($identifiers) === 1) { 
     $ids = array_combine($identifiers, (array) $ids); 
    } 

    $q = Doctrine_Core::getTable($className) 
      ->createQuery(); 

    $conditions = array(); 
    $values = array(); 
    foreach ($identifiers as $id) { 
     if (!isset($ids[$id])) { 
      throw new Doctrine_Record_Exception('Primary key \'' . $id . '\' must be given to access ' . $className . '.'); 
     } 
     $conditions[] = $className . '.' . $id . ' = ?'; 
     $values[] = $ids[$id]; 
    } 

    $q->where(implode(' AND ', $conditions)); 

    $data = $q->execute($values, Doctrine_Core::HYDRATE_ARRAY); 

    return $data; 
} 
1

我在相應表-1實施的訪問捷徑類例如model/doctrine/ItemTable.class.php

public static function getHistoryInstance() { 
    return self::getInstance()->getTemplate('Versionable')->getAuditLog()->getTable(); 
} 

然後從徘徊無論訪問歷史是這樣的:

$history_collection = ItemTable::getHistoryInstance()->createQuery() 
      ->select('id') 
      ->execute(); 

(我使用的Symfony 1.4學說1.2)

相關問題