以下是更新查询的一些ZF1代码:
$this->getAdapter()->update(
'users', $data, $this->getAdapter()->quoteInto('node_id = ?', $user->nodeId)
);
以下是与ZF2相同的查询:
$param = $this->getAdapter()->platform->quoteValue($user->nodeId);
$sqlOj = new Sql($this->getAdapter());
$update = $sqlOj->update('users')->set($data)->where('node_id = ' . $param);
$updateString = $sqlOj->getSqlStringForSqlObject($update);
$this->getAdapter()->query($updateString, Adapter::QUERY_MODE_EXECUTE);
正如你所看到的,一行ZF1代码变成了5行ZF2代码,(实际上没有流畅的界面,它将是7行......)
我错过了什么吗?或者ZF2的数据库组件是否比ZF1更详细?
顺便说一句,我也发现了同样的方案,选择和插入查询......
答案 0 :(得分:1)
我设法将其限制为3行。
use \Zend\Db\Sql\Sql;
$sql = new Sql ($adapter);
$update = $sql->update ('users')->set ($data)->where (['id = ?' => 1]);
$adapter->query ($sql->getSqlStringForSqlObject ($update), $db::QUERY_MODE_EXECUTE);
问题是他们没想到你会像这样运行你的更新。相反,您应该使用表网关。 这样它又变成了一行:
$this->tableGateway->update($data, array('id' => $id));