Я хотел бы получить точный Запрос на вставку SQL, который генерирует Доктрина, когда сохранение объекта () метод называют.
Предпочтительно, я хотел бы получить его в постсохранении () событие модели и зарегистрировать его в txt файле.
Например:
<?php
$user = new User(); // A Doctrine Model with timestampable behavior enabled
$user->first_name = 'Manny';
$user->last_name = 'Calavera';
$user->save();
?>
Я хочу получать/регистрировать следующий SQL-запрос:
INSERT INTO user (first_name, last_name, created_at, updated_at) VALUES ('Manny', 'Calavera', '2010-08-03 12:00:00', '2010-08-03 12:00:00');
Фон для необходимости в этом, то, что я желаю к массовому импорту позже данных путем парсинга txt файла.
Я не думаю, что есть какой-то простой способ сделать это, поскольку поведение save () зависит от нескольких разных вещей (если вы вставляете / обновляете).
Если вы создали объект запроса доктрины, вы можете вызвать метод getSqlQuery () следующим образом:
$q = Doctrine_Query::create()
->select('u.id')
->from('User u');
echo $q->getSqlQuery();
но save () - это метод, а не объект, поэтому это не сработает. Я думаю, вам придется взломать какой-то код, чтобы определить, вставляете ли вы или обновляете, и создавать запрос для входа в систему на лету, а затем использовать save ().
Я знаю, что это предложение не идеально, потому что оно не регистрирует «точно», что делает save (), но для целей, которые вы указали, оно должно работать точно так же.
Посмотрите здесь: http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-8-hooks-profiling-dql и перейдите к разделу Profiling with Doctrine и Creating a Profiler Hook. Хотя эта статья предназначена для использования с фреймворком CodeIgniter, она может быть легко адаптирована к вашей собственной среде, поскольку код не имеет зависимостей от фреймворка.
В основном вы хотите установить Connection Profiler и позволить ему записывать все запросы в файл. Я рекомендую добавлять все запросы в файл, чтобы получить ощущение "журнала". Пусть вас не смущает много разговоров о фреймворке в статьях. Примеры очень хорошо работают (с небольшим пониманием и копированием и вставкой) в других сценариях.