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

标签 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();
?>

我想获取/记录以下 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() 的行为会因一些不同的事情而异(如果您正在插入/更新)。

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

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

echo $q->getSqlQuery();

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

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

关于php - Doctrine - 如何在 postSave() 事件中获取 SQL INSERT 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395569/

相关文章:

php - 错误: You have an error in your SQL syntax; near ')' at line 1

javascript - 几秒钟后转到下一页

java - 用单个 SQL 语句填充一个包含另一个 pojo 的数组列表的 pojo,并正确迭代结果集

mysql - 请帮助使用MySQL来选择要写入的数据需要一个select语句而要创建的记录需要另一个

java - 导入 csv 文件以填充 Netbeans 中表中的数据

php - Laravel 中的错误页面设置为默认。如何禁用

php - 通过php向mysql数据库插入大量数据时出现服务器错误500

python - 从 python 调用时,sql 中的 HASHBYTES、sha2_256 引入了错误字符

import - 控制 MySQL 转储/导入的日期时间格式

java - 无法导入 java.util.Scanner