Могу ли я получить коллекцию версий для версии Doctrine? - PullRequest
2 голосов
/ 22 марта 2010

Итак, я пытаюсь найти способ получить коллекцию всех версий версии Doctrine Record. Это возможно? Я мог бы определенно создать что-то, что сделало бы это, но я не был уверен, что функциональность уже встроена. Заранее спасибо, John

Ответы [ 4 ]

3 голосов
/ 22 марта 2010

Я почти уверен, что поведение версии Doctrine (по крайней мере версии 1.2) не определяет никаких дополнительных методов для вашей модели, кроме revert(), который позволяет вам вернуть предыдущую версию ресурса.

Так что вам придется все делать самостоятельно.

1 голос
/ 18 июля 2012

Я реализовал ярлык доступа в соответствующем табличном классе , например. 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)

1 голос
/ 09 июля 2010

вы можете запросить в таблице версий: Учение :: GetTable ( 'EntityVersions') -> findAllById ($ ENTITY_ID);

gyaan : для любой таблицы версий PK совместно помещается в id и версию. В отличие от стиля доктрины по умолчанию, здесь нет суррогатного ключа!

0 голосов
/ 01 февраля 2012

На всякий случай, если кто-нибудь еще наткнется на это: Вот быстрое решение, как получить версионные записи. (Конечно, это лучше реализовать внутри или как расширение класса 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;
}
...