У меня есть объект A с ассоциацией "многие ко многим" (с таблицей соединений).
На этом объекте я зарегистрировал обработчик событий для события PostUpdate
.
Внутриэто событие я хочу выдавать запросы к базе данных.Однако прослушиватель выполняется до выполнения оператора SQL INSERT, поэтому прослушиватель PostUpdate не видит результат обновления.
С другой стороны, изменяется, например, на некоторое целочисленное полемоей сущности выполняются до PostUpdate!
class A {
/**
* @ORM\Column(type="integer")
*/
public $position = 0;
/**
* @ORM\ManyToMany(targetEntity="B")
* @ORM\JoinTable(name="jointable",
* joinColumns={@ORM\JoinColumn(name="a", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="b", referencedColumnName="id")})
* @ORM\Cache(usage="NONSTRICT_READ_WRITE")
*/
public $manytomany;
}
Когда я выполняю этот код:
$a = getAFromRepo();
$b = getBFromRepo();
$a->position = 555;
$a->manytomany->add($b);
$em->flush();
Слушатель, например:
class PostUpdateListener {
private $em;
public function postUpdate(LifecycleEventArgs $args){
var_dump($this->em->getConnection()->executeQuery(
"SELECT position FROM a WHERE a = :id",
['id' => $args->getEntity()->getId()]); // <------ shows updated value
var_dump($this->em->getConnection()->executeQuery(
"SELECT data_category FROM jointable WHERE a = :id",
['id' => $args->getEntity()->getId()]); <-------- new row is missing
}
}
Просматривая журнал,Я вижу, что строка вставлена после завершения прослушивания последнего события.