我想获得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();
- ?>
- 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()的行为取决于几个不同的东西(如果你正在插入/更新).
如果您已经创建了一个doctrine查询对象,那么您可以像这样调用getsqlQuery()方法:
- $q = Doctrine_Query::create()
- ->select('u.id')
- ->from('User u');
- echo $q->getsqlQuery();
但save()是一个方法,而不是一个对象,所以这不起作用.我认为你必须破解一些代码来检测你是否正在插入或更新并构建一个查询以便即时登录然后使用save().
我知道这个建议并不理想,因为它并没有“完全”记录save()正在做什么,但出于你声明的目的,它仍然可以正常工作.