Doctrine ako vykonat akciu pred ulozenim a porovnat data ci sa nezmenili
- duskohu
- Člen | 778
Caute, snazim sa v doctrine pred ulozenim entity vykonat akciu ktora zmeni
dalsie stlpec a persistne.
Dalsia vec chcel by som porovnat entitu s tou co je este v db a neni zmenena.
Nevie niekto ako na to?
public function save(Page $entity)
{
$connection = $this->em->getConnection();
$connection->beginTransaction();
try {
$this->em->persist($entity);
$this->treeSlugHandler($entity);
$this->em->flush();
$connection->commit();
return $entity ? : TRUE;
} catch (\Exception $e) {
$connection->rollback();
throw $e;
}
}
private function treeSlugHandler(Page $entity)
{
// Tu by som chcel urobit nejake dalsie operacie a porovnat entitu z entitou v db
$uow = $this->em->getUnitOfWork(); // skusal som si vytiahnut toto a,e neviem ci idem na to spravne
}
- Jiří Nápravník
- Člen | 710
Melo by ti pomoci mrknout na EntityListenery , tam si prichytnes na ty konkretni eventy, co potrebujes a upravis.
Btw proc volas rucne transakce, flush je samotny zabalen v transakci, pokdu jsi to nezmenil.
- duskohu
- Člen | 778
Ze sa vola flush v tranzakci som nevedel, dik. Ten listener treba nejako zaregistrovat? Smozrejme okrem:
/**
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="pages")
* @ORM\Entity
* @ORM\EntityListeners({"Nas\TreeSlugListener"})
*/
class Page
Editoval duskohu (24. 9. 2014 21:49)
- David Matějka
- Moderator | 6445
v kdyby/doctrine museji byt entity listenery registrovany jako sluzba
- duskohu
- Člen | 778
Samozrejme mam, ale stale sa nevola
entita:
/**
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="pages")
* @ORM\Entity
* @ORM\EntityListeners({"Nas\PagesModule\Model\TreeSlugListener"})
*/
class Page
listener:
namespace Nas\PagesModule\Model;
class TreeSlugListener
{
public function prePersistHandler($page, $event)
{
bd($page);
}
}
config:
services:
- Nas\PagesModule\Model\TreeSlugListener
- David Matějka
- Moderator | 6445
precti si poradne tu docku, pokud maji mit ty metody custom jmena (tedy jine, nez prePersist apod), museji mit anotace.
- David Matějka
- Moderator | 6445
a vkladas ten zaznam, jo? protoze prePersist se vola pouze pri insertu, nikoliv pri update
- duskohu
- Člen | 778
takze skusal som variant 1, tento sa mi nespusti
services:
- Nas\PagesModule\Model\TreeSlugListener
/**
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="pages")
* @ORM\Entity
* @ORM\EntityListeners({"Nas\PagesModule\Model\TreeSlugListener"})
*/
class Page
<?php
namespace Nas\PagesModule\Model;
class TreeSlugListener
{
public function onFlush($args)
{
bd($args);
}
}
tento variant s kdyby sa spusti, ale nevyhoda je ze budem musiet osetrovat aby to bolo na konkretnu entitu
services:
- Nas\PagesModule\Model\TreeSlugListener
nassluggable:
class: Nas\PagesModule\Model\TreeSlugListener
tags: [kdyby.subscriber]
autowired: no
<?php
namespace Nas\PagesModule\Model;
class TreeSlugListener implements \Kdyby\Events\Subscriber
{
public function onFlush($args)
{
bd($args);
}
public function getSubscribedEvents()
{
return array(
'onFlush'
);
}
}