所以我试图找到一种方法来获取可版本化Doctrine Record的所有版本的集合。这可能吗?我绝对可以构建一些可以做到的东西,但我不确定功能是否已经内置。 提前致谢, 约翰
答案 0 :(得分:3)
我很确定Doctrine的(至少1.2版本)版本化行为没有为您的模型定义任何其他方法,除了revert()
允许您恢复以前版本的资源。
所以你必须自己做所有事情。
答案 1 :(得分:1)
您可以在Version表上查询: 教义:: getTable( 'EntityVersions') - > findAllById($ ENTITY_ID);
gyaan :对于任何版本表,PK都共同放在id&版。与默认的学说风格不同,没有代理键!
答案 2 :(得分:1)
我在相应的Table-Class 中实现了一个访问快捷方式,例如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和Doctrine 1.2)
答案 3 :(得分:0)
以防万一其他人偶然发现:以下是如何获取版本化记录的快速解决方案。 (这当然应该更好地在'AuditLog'类的内部或扩展中实现,但是为了快速解决方案,以下内容可以随处去。)
/**
* 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;
}