Intereting Posts
Вызов статического метода из экземпляра в PHP, будущая усталость? Ошибка сервера PHPMailer Gmail В чем разница между mysql_real_escape_string и addslashes? Скрытие истинного идентификатора объекта базы данных в url's Как объединить массив на основе их ключа по значению в php? Как безопасно генерировать хэши SSHA256 или SSHA512 в PHP? Библиотека HTML-форм для PHP 5 Смешивание столбцов GROUP (MIN (), MAX (), COUNT (), …) без столбцов GROUP является незаконным, если нет предложения GROUP BY regex (в PHP), чтобы соответствовать &, которые не являются объектами HTML Селен не показывает неудачные номера строк Использование переменной javascript для установки переменной PHP Построить json для отправки на php с помощью цикла for (возможно) включить после возврата заголовка PHP 404 «Ой! Эта ссылка, похоже, сломана. Нужно отправить изображение и текст на сервер Установка переменной в оператор, выполняющий ее

Вставка элемента в приемник доктрины

Я настроил прослушиватель доктрины, который запускается в разных действиях базы данных и создает объект журнала и вставляет его в базу данных.

class FOO { // [...] public function onFlush(OnFlushEventArgs $args) { foreach ($args->getEntityManager()->getUnitOfWork()->getScheduledEntityUpdates() as $entity) { $this->createLog('edit', $entity); } } private function createLog($action, $entity) { if ($entity instanceof Log) { return; } $log = new Log; $log->setAction($action); $log->setTime(new \DateTime); $log->setForeignId($entity->getId()); $log->setUser($this->getUser()); $t = explode('\\', get_class($entity)); $entity_class = strtolower(end($t)); $log->setEntity($entity_class); $this->getEntityManager()->persist($log); } // [...] } 

Когда я обновляю объект, я получаю следующую ошибку:

SQLSTATE [HY093]: недопустимый номер параметра: параметры не были связаны

В профилировщике я вижу этот запрос:

INSERT INTO vvg_logs (действие, сущность, foreign_id, user_id, время) VALUES (?,?,?,?,?)

Параметры: {}

Как я могу решить эту проблему?

UPDATE Вот моя новая тема, связанная с этим вопросом: LINK

Solutions Collecting From Web of "Вставка элемента в приемник доктрины"

Потому что, когда onFlush , все изменения уже рассчитаны, и вам нужно обновить их, если вы измените свой объект или создадите новый объект.

 $em = $this->getEntityManager(); $uow = $em->getUnitOfWork(); $logMetadata = $em->getClassMetadata('Your\LogClass'); ... $em->persist($log); $uow->computeChangeSet($logMetadata, $log); 

Для postPersist:

 $em = $this->getEntityManager(); $uow = $em->getUnitOfWork(); $log = new Log; ... $logMetadata = $em->getClassMetadata('Your\LogClass'); $className = $logMetadata->name; $persister = $this->getEntityPersister($className); $persister->addInsert($log); $uow->computeChangeSet($classMeta, $logEntry); $postInsertIds = $persister->executeInserts(); if ($postInsertIds) { foreach ($postInsertIds as $id => $entity) { $idField = $logMetadata->identifier[0]; $logMetadata->reflFields[$idField]->setValue($entity, $id); $this->addToIdentityMap($entity); } }