Использовать loggable для ссылки на версию продукта в строке заказа?

Я хотел бы отслеживать изменения разных сущностей и ссылаться на конкретную версию из других таблиц. Например: в Orderline В таблице я бы хотел сослаться на конкретную версию продукта.

Это Loggable расширение лучший способ реализовать эту функцию или я должен вручную добавить сущность ProductVersion?

я использую Loggable в этот момент, и я думаю, что мне не хватает такой функции, как $product->getCurrentVersion() чтобы получить номер текущей версии. Или я неправильно прочитал документацию?

3

Решение

Вы можете реализовать эту функцию в своем репозитории, чтобы получить текущую / последнюю версию

public function getCurrentVersion($id)
{
$repo = $this->_em->getRepository('Gedmo\Loggable\Entity\LogEntry');
$log = $repo->findOneBy(array('objectId' =>$id), array('version' => 'desc'));
return $log ? $log->getVersion() : null; // or return $log for entire object
}
2

Другие решения

С помощью Loggable Расширение это можно сделать с помощью:

$repo = $em->getRepository('Gedmo\Loggable\Entity\LogEntry');
// your Product entity
$product = $em->find('Entity\Product', $id);
// find revisions for given product
$logs = $repo->getLogEntries($product);
if (count($logs) > 0) {
// as it is sorted descending by version
$currentVersion = $repo->getLogEntries($product)[0]->getVersion();
}

Я также могу порекомендовать вас EntityAudit расширение: https://github.com/simplethings/EntityAudit

В вашем случае это будет:

$auditReader = $this->container->get("simplethings_entityaudit.reader");
$revision = $auditReader->getCurrentRevision(
'YourBundle\Entity\Product',
$id
);
// current version number
$revision->getRev();

Вы также можете:

  • найти состояние объекта при определенной ревизии
  • найти измененные объекты в определенной ревизии
  • найти историю изменений аудируемого лица
2

Я бы посоветовал взглянуть на это расширение для Doctrine 2 -> EntityAudit (есть объяснение, как установить его в Symfony2).

Как вы можете прочитать в документации,

Это расширение для Doctrine 2 вдохновлено Hibernate Envers и
позволяет полное управление версиями сущностей и их ассоциаций.

Использование довольно просто. Вы можете сделать следующее, как только оно будет установлено:

  1. Укажите сущности, которые вы хотите проверить. Давайте начнем с продукта:

приложение / Config / config.yml

simple_things_entity_audit:
audited_entities:
- MyBundle\Entity\Product
  1. Запустите обновление в вашей БД для создания необходимых таблиц:

./app/console doctrine:schema:update --force

  1. А потом с вашего контроллера:

    class DefaultController extends Controller {
    public function indexAction() {
    ....
    $auditReader = $this->container->get("simplethings_entityaudit.reader");
    
    foreach( $orderLine as $product ) {// Let's assume for simplicity that this makes sense.
    $productAudit = $auditReader->find(
    'SimpleThings\EntityAudit\Tests\ProductAudit',
    $id = $product->getId(),
    $rev = 10 // Number of the revision you're interested in.
    );
    // Do whatever you please with the estate of the entity at revision 10!
    }
    ....
    }
    }
    

Надеюсь, поможет.

С наилучшими пожеланиями и счастливого нового года.

1
По вопросам рекламы [email protected]