我正在通过学说使用本机 sql 调用存储过程。
fetchAllAssociative()
和 execute
已弃用。有哪些替代方案?
$sql = 'CALL spWithParams(:param)';
$stmt = $this->getEntityManager()->getConnection()->prepare($sql);
$stmt->execute([":param"=>"test"]);
print_r($stmt->fetchAllAssociative());
我不打算使用
ResultSetMapping()
将响应映射到实体,如here所述,因为我将在其上添加自定义包装器。
执行此操作的正确方法是使用 ResultSetMapping 和 标量结果 来选择任意字段。然后,您可以使用
getArrayResult()
执行查询,以实现与提供的代码中相同的行为。
举个例子:
$rsm = new ResultSetMapping();
$rsm->addScalarResult('my_database_column', 'myField');
$query = $this->getEntityManager()->createNativeQuery(
'CALL spWithParams(:param)',
$rsm
);
$query->setParameters([":param"=>"test"]);
$results = $query->getArrayResult();
/*
[
['myField' => 'foo'],
['myField' => 'bar']
]
*/