如何在Doctrine 2中执行本机sql查询,执行更新语句? EntityManager上的createNativeQuery方法需要第二个参数(ResultSetMapping)才能将结果集映射到Objects。
但是在更新(或插入,设置或......)时,没有映射的结果集。 传递null或只是新的ResultSetMapping(),会出错。
是否只支持本机sql的选择查询?
答案 0 :(得分:11)
基本上同上它/ faken,
来自docs:
如果要执行Native的DELETE,UPDATE或INSERT语句 SQL API无法使用,可能会抛出错误。使用 EntityManager#getConnection()访问本机数据库连接 并为这些查询调用executeUpdate()方法。
使用的一个注意事项是可以从EntityManager中检索连接对象:
$conn = $entityManager->getConnection();
$rowsAffected = $conn->executeUpdate($sql, $params, $types);
答案 1 :(得分:1)
更新语句通常非常简单,因此您也可以使用正常的Doctrine2方式(即以编程方式更新实体并使用DQL Updates调用EntityManager :: flush()OR。)
说完这个,如果你真的想使用普通的SQL,你可以这样做:
保持与Doctrine2建立连接时获得的db connection object:
$ connection = \ Doctrine \ DBAL \ DriverManager :: getConnection($ dbConfig-> toArray(),null,$ evm);
使用connection对象中的可用方法执行您想要的任何SQL,例如:
$ connection-> executeUpdate($ sql,$ params,$ types); $连接 - > EXEC($ SQL); ...