doctrine2本机查询更新语句

Sew*_*wdn 3 native doctrine-orm

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

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

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

qui*_*tin 11

基本上同上,用faken,

这来自文档:

如果要执行DELETE,UPDATE或INSERT语句,则无法使用Native SQL API,并且可能会抛出错误.使用EntityManager#getConnection()访​​问本机数据库连接并为这些查询调用executeUpdate()方法.

一个使用注意事项是可以从EntityManager检索连接对象:

$conn = $entityManager->getConnection();
$rowsAffected = $conn->executeUpdate($sql, $params, $types);
Run Code Online (Sandbox Code Playgroud)


fak*_*ken 2

更新语句通常非常简单,因此您不妨使用正常的 Doctrine2 方式(即以编程方式更新实体并调用 EntityManager::flush() 或使用DQL Updates)。

话虽如此,如果你真的想使用普通的 SQL,你总是可以这样做:

  1. 保留与 Doctrine2 创建连接时获得的数据库连接对象:

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

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

    $连接->executeUpdate($sql, $params, $types); $连接->exec($sql); ...