@mysql_query() уже одного этого кусочка хватает для того, чтобы сильно усомниться в скиллах.

$violations = $this->get('validator')->validate($dto);$dto = $this->get('serializer')->deserialize(
$request->getContent(),
DTO::class
);public function editAction(DTO $dto)
{
}а также знаю что в быстрозаймах всяких можно с такой фотографией взять кредит
ini_set('pcre.backtrack_limit', 10000000); // Лимит обратных ссылок
SELECT doc1Groupped.maxId, doc1Groupped.maxVersion, doc2.id
FROM (
SELECT MAX(doc1.id) as maxId, MAX(doc1.version) as maxVersion
FROM doc1
GROUP BY doc1.date, doc1.title
) as doc1Groupped
JOIN doc2 ON doc1Groupped.maxId = doc2.id
WHERE doc2.id is NULL OR doc2.history = ''
$unitOfWork->getEntityChangeSet($entity);$metaData = $entityManager->getClassMetadata(get_class($entity));
//отбираем ассоциации "не коллекции" и только изменненные.
$singleAssociations = array_filter($metaData->getAssociationNames(), function ($association) use ($metaData) {
return $metaData->isSingleValuedAssociation($association);
});
$data = [];
foreach ($changesSet as $key => $field) {
if (in_array($key, $singleAssociations)) {
// где $field[0] и $field[1] будут как раз простыми ассоциациями "до" и "после"
//getAssocFieldValue - просто метод который берет из ассоциации нужное простое значение для лога
$data[$key] = [$this->getAssocFieldValue($field[0]), $this->getAssocFieldValue($field[1])];
}
}