Доктрина - как получить Запрос на вставку SQL в постсохранении () событие?

Я хотел бы получить точный Запрос на вставку 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 файла.

7
задан aletzo 3 August 2010 в 10:20
поделиться

2 ответа

Я не думаю, что есть какой-то простой способ сделать это, поскольку поведение save () зависит от нескольких разных вещей (если вы вставляете / обновляете).

Если вы создали объект запроса доктрины, вы можете вызвать метод getSqlQuery () следующим образом:

$q = Doctrine_Query::create()
->select('u.id')
->from('User u');

echo $q->getSqlQuery();

но save () - это метод, а не объект, поэтому это не сработает. Я думаю, вам придется взломать какой-то код, чтобы определить, вставляете ли вы или обновляете, и создавать запрос для входа в систему на лету, а затем использовать save ().

Я знаю, что это предложение не идеально, потому что оно не регистрирует «точно», что делает save (), но для целей, которые вы указали, оно должно работать точно так же.

1
ответ дан 7 December 2019 в 20:32
поделиться

Посмотрите здесь: http://www.phpandstuff.com/articles/codeigniter-doctrine-scratch-day-8-hooks-profiling-dql и перейдите к разделу Profiling with Doctrine и Creating a Profiler Hook. Хотя эта статья предназначена для использования с фреймворком CodeIgniter, она может быть легко адаптирована к вашей собственной среде, поскольку код не имеет зависимостей от фреймворка.

В основном вы хотите установить Connection Profiler и позволить ему записывать все запросы в файл. Я рекомендую добавлять все запросы в файл, чтобы получить ощущение "журнала". Пусть вас не смущает много разговоров о фреймворке в статьях. Примеры очень хорошо работают (с небольшим пониманием и копированием и вставкой) в других сценариях.

0
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: