У меня есть две сущности.
Во-первых, это мой родительский объект, свойство которого называется productsCount.
У этого объекта есть еще один объект, связанный с ним, который называется «Магазин» и «Магазин, связанный с комнатой». В каждой комнате может быть несколько товаров.
Когда я редактирую продукты, назначенные для комнаты, я хочу обновить Parent productsCount для хранения количества всех продуктов во всех комнатах во всех магазинах.
У меня есть SQL-запрос, который вычисляет количество. Мне нужно делать это каждый раз, когда я обновляю Комнату новыми продуктами. Это делается с помощью ловушки preFlush с использованием EntityListener на объекте Room.
Хук preFlush срабатывает должным образом, но по какой-то причине время ожидания истекает.
Вот пример кода preFlush
public function preFlush(Room $room, PreFlushEventArgs $args)
{
$em = $args->getEntityManager();
$parent = $room->getStore()->getParent();
$rsm = new ResultSetMapping();
$rsm->addScalarResult('COUNT(product_id)', 'count');
$query = $em->createNativeQuery(
'select COUNT(product_id)
from room_product where `room_id` in
(select id from room where store_id in
(select id from store where parent_id = :parentId))', $rsm);
$query->setParameter('parentId', $parent->getId());
$result = $query->getOneOrNullResult();
$parent->setNumberOfServices($result['count']);
$em->persist($parent);
$em->flush();
}
Запрос должен работать нормально, поэтому я думаю, что он как-то связан с очисткой и сохранением родительской сущности.
Есть идеи?