preUpdate и preRemove, но вместо внесения изменений непосредственно просто складываем их где-то в классе-обработчикеEntityManager::flush() в этом случае. Я в своих проектах в обработчике postFlush, в случае если были какие-то изменения, ставил флаг $flushRequired. Сам класс обработчика подписывал на событие kernel.terminate и в этом обработчике ставил:if ($this->flushRequired) {
$this->em->flush();
} Yii::$app (такой же есть и в Laravel, кстати), откуда все подряд классы пытаются дёргать информацию вместо использования честного IoC (inverse of control, часть принципов SOLID). Yii::$app) - открывает недисциплинированным программистам возможности делать во views то что там делать нельзя (никогда не видели запросов к базе из views?)/graphql/query/.X-Instagram-GIS с форматом значения, который я описал выше. Значение передаваемое в md5() имеет формат gis:vars где:gis - это токен, он берётся из переменной window._sharedData по ключу rhx_gis, имеет вид md5 хэшаvars - это содержимое параметра запроса variables в формате jsondebug:container, не помню есть ли она в 3-ей. Но лично я предпочитаю просто искать соответствующий метод в откомпилированном контейнере и смотреть что происходит по факту. app/config/parameters.yml и настраивать там параметры отвечающие за подключение. Если там всё хорошо и сами параметры верные - то проблема где-то глубже.
Мы как раз недавно вот здесь обсуждали схожий вопрос, возможно вам будет интересно.