我正在尝试在Zend Framework 2中更新MySQL数据库中的值。我想在表中使用where和Join。表结构是
-----Credit-----
ContactID
Credits
-----Token------
ContactID
Token
我想写下面的MYSQL查询
"Update credit_details
LEFT JOIN token ON token.CONTACT_ID = credit.CONTACT_ID
SET CREDITS = '200'
WHERE TOKEN ='$token';".
到目前为止,我有以下代码,但似乎无效。
$this->tableGateway->update(function (Update $update) use ($token){
$update->set(array('CREDITS'=>$credits))
->join('token','token.CONTACT_ID=credit.CONTACT_ID', array( 'CONTACT_ID'=>'CONTACT_ID'
),'left')
->where($this->tableGateway->getAdapter()->getPlatform()->quoteIdentifierChain(array('token_details','TOKEN')) . ' = ' . $this->tableGateway->getAdapter()->getPlatform()->quoteValue($token));
});
答案 0 :(得分:0)
给予一些澄清。 UPDATE没有带JOIN的抽象层。 Zend Update DBAL没有要调用的连接方法。
为了使用ZF2的表网关进行连接更新,您需要扩展表网关并编写自己的updateJoin方法或扩展Sql \ Update对象,如UpdateJoin并添加连接方法。
为了使用tableGateway来更新连接而不扩展ZF2对象,你需要做类似下面的事情
<?php
/* Define a token for the example */
$token = 12345;
/* create a new statement object with the current adapter */
$statement = $this->tableGateway->getAdapter()
->createStatement(
'UPDATE credit_details
LEFT JOIN token
ON token.CONTACT_ID = credit_details.CONTACT_ID
SET credit_details.CREDITS = 100
WHERE token.TOKEN = ?'
);
/* create a new resultset object to retrieve results */
$resultSet = new Zend\Db\ResultSet\ResultSet;
/* execute our statement with the token and load our resultset */
$resultSet->initialize( $statement->execute( array( $token ) ) );
/* display the affected rows */
echo $resultSet->count();
关闭主题
还提供一些建议,可以为您节省一些麻烦。使用ZF2 DBAL并指定了适配器和驱动程序时,驱动程序将为您处理引用标识符和值。除非您特别使用Zend \ Db \ Sql \ Expression或Zend \ Db \ Sql \ Literal,否则您需要处理引号标识符和值。 在大多数情况下,您可以在where调用中使用Zend \ Db \ Sql \ Predicate \ Predicate,这是我首选的方法。
EG:
<?php
$adapter = new Zend\Db\Adapter\Adapter($configArray);
$sql = new Zend\Db\Sql\Sql($adapter);
$update = $sql->update( 'credit_details');
$update->set( array('CREDITS' => $credits) );
$update->where( array( 'CONTACT_ID' => $contact_id ) );