doctrine2本机查询更新语句

时间:2011-06-23 22:13:44

标签: native doctrine-orm

如何在Doctrine 2中执行本机sql查询,执行更新语句? EntityManager上的createNativeQuery方法需要第二个参数(ResultSetMapping)才能将结果集映射到Objects。

但是在更新(或插入,设置或......)时,没有映射的结果集。 传递null或只是新的ResultSetMapping(),会出错。

是否只支持本机sql的选择查询?

2 个答案:

答案 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,你可以这样做:

  1. 保持与Doctrine2建立连接时获得的db connection object

    $ connection = \ Doctrine \ DBAL \ DriverManager :: getConnection($ dbConfig-> toArray(),null,$ evm);

  2. 使用connection对象中的可用方法执行您想要的任何SQL,例如:

    $ connection-> executeUpdate($ sql,$ params,$ types); $连接 - > EXEC($ SQL); ...