Я хотел бы отслеживать изменения разных сущностей и ссылаться на конкретную версию из других таблиц. Например: в Orderline
В таблице я бы хотел сослаться на конкретную версию продукта.
Это Loggable
расширение лучший способ реализовать эту функцию или я должен вручную добавить сущность ProductVersion?
я использую Loggable
в этот момент, и я думаю, что мне не хватает такой функции, как $product->getCurrentVersion()
чтобы получить номер текущей версии. Или я неправильно прочитал документацию?
Вы можете реализовать эту функцию в своем репозитории, чтобы получить текущую / последнюю версию
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
}
С помощью 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();
Вы также можете:
Я бы посоветовал взглянуть на это расширение для Doctrine 2 -> EntityAudit (есть объяснение, как установить его в Symfony2).
Как вы можете прочитать в документации,
Это расширение для Doctrine 2 вдохновлено Hibernate Envers и
позволяет полное управление версиями сущностей и их ассоциаций.
Использование довольно просто. Вы можете сделать следующее, как только оно будет установлено:
приложение / Config / config.yml
simple_things_entity_audit:
audited_entities:
- MyBundle\Entity\Product
./app/console doctrine:schema:update --force
А потом с вашего контроллера:
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!
}
....
}
}
Надеюсь, поможет.
С наилучшими пожеланиями и счастливого нового года.