2016-09-26 2 views
0

Добро пожаловать,Doctrine Event - sql query

У меня есть слушатель и метод postPersist(). Мне нужен код sql с «$ em-> persist()». Мой пример:

public function postPersist(LifecycleEventArgs $args) { 
    $em = $args->getEntityManager(); 
    //.. 
    $em->getUnitOfWork()->getEntityPersister($name); 


} 

Я вижу: частный 'InsertSQL' => строка 'INSERT INTO ... (...) VALUES (,,,,,,?????)' (length = 108) Но у меня нет доступа.

Зачем нужен код sql? Потому что мне нужно отправить sql в таблицу без Entity.

+0

Не могли бы вы объяснить свое требование с помощью 'postPersist' в деталях. Если вы используете 'LifecycleEventArgs', вам не нужно иметь дело с пользовательским запросом. Доктрина может справиться сама. – Jeet

+0

Я должен сделать копии модели для другой таблицы. Когда у меня есть «предыдущий запрос», я могу изменить имя таблицы и отправить запись. – viko

+0

Вы настроили эту «другую таблицу» в качестве другого объекта ORM в своем приложении? Если это так, вы все равно можете скопировать эти данные с изменением значения атрибута в соответствии с вашим требованием. – Jeet

ответ

0
public function postPersist(LifecycleEventArgs $args) { 
    $em = $args->getEntityManager(); 
    $entity = $args->getObject(); 
    $originalEntityData = $em->getUnitOfWork()->getOriginalEntityData($entity); 
} 

getOriginalEntityData() возвращает массив с именем и значением поля. Но когда запись обновляется, этот метод не возвращает объект ID. Date и DateTime - это объекты.

Когда у меня есть эти данные (объекты полей и значений), я могу отправить запись с использованием PDO. Может быть, я должен использовать модель, но сохраняет состояние объекта ... (versionable) и записывает его в БД.