Doctrine - 如何在postSave()事件中获取SQL INSERT查询?

ale*_*tzo 7 php sql import doctrine

我想获得Doctrine在调用对象的save()方法时生成的确切SQL INSERT查询.

最好,我想在模型的postSave()事件中获取它并将其记录在txt文件中.

例如:

<?php 
$user = new User(); // A Doctrine Model with timestampable behavior enabled
$user->first_name = 'Manny';
$user->last_name = 'Calavera';
$user->save();
?>
Run Code Online (Sandbox Code Playgroud)

我想获取/记录以下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');
Run Code Online (Sandbox Code Playgroud)

需要这个的背景是,我希望通过解析txt文件来批量导入数据.

Eve*_*oob 2

我认为没有任何简单的方法可以做到这一点,因为 save() 的行为会根据一些不同的事情而变化(如果您要插入/更新)。

如果您创建了一个学说查询对象,那么您可以像这样调用 getSqlQuery() 方法:

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

echo $q->getSqlQuery();
Run Code Online (Sandbox Code Playgroud)

但 save() 是一个方法,而不是一个对象,所以这不起作用。我认为您必须修改一些代码来检测您是否正在插入或更新并构建一个查询以动态登录,然后使用 save()。

我知道这个建议并不理想,因为它没有“准确”记录 save() 正在做什么,但出于您所说的目的,它仍然应该可以正常工作。