ZF2:有没有更有效的方法来执行Zend \ Db Update查询?

时间:2013-12-03 04:02:55

标签: sql zend-framework2

以下是更新查询的一些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更详细?

顺便说一句,我也发现了同样的方案,选择和插入查询......

1 个答案:

答案 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));