Php 使用交换值表达式更新zend框架

Php 使用交换值表达式更新zend框架,php,zend-framework,zend-db-table,Php,Zend Framework,Zend Db Table,我尝试进行通用更新/交换,它将始终切换活动状态。在SQL中很简单: UPDATE contacts SET active = ABS( active - 1 ) WHERE id = .... 其中active是小int/flag 0或1,因此它始终有效 当我尝试将其实现为模型类extend Zend_Db_Table时: public function disableContact( $contact_id ) { $where = $this->getAdapter( )-&

我尝试进行通用更新/交换,它将始终切换活动状态。在SQL中很简单:

UPDATE contacts SET active = ABS( active - 1 ) WHERE id = ....
其中active是小int/flag 0或1,因此它始终有效

当我尝试将其实现为模型类extend Zend_Db_Table时:

public function disableContact( $contact_id )
{
    $where = $this->getAdapter( )->quoteInto( 'id = ?', $contact_id );
    $data = Array( );
    $data ['active'] = '(ABS( the.contacts.active - 1 ))';

    return parent::update( $data, $where );
}
我得到了
错误:SQLSTATE[22P02]:无效的文本表示:7错误:整数的输入语法无效:“(ABS(the.contacts.active-1))”\0……/ZendFramework-1.11.0/library/Zend/Db/Statement.php(300):Zend\u Db\u Statement\u Pdo->\u execute(Array)


如何传递ABS表达式进行更新?

使用
Zend\u Db\u Expr
,例如

我能在手册中找到的最好的例子是插入数据,但概念是一样的。看


仅供参考
Zend_Db_Select
识别括号中的值并将其视为表达式。

使用
Zend_Db_Expr
,例如

我能在手册中找到的最好的例子是插入数据,但概念是一样的。看


仅供参考
Zend_Db_Select
识别括号中的值并将其视为表达式。

+1。而
ABS
在这里是不必要的:
1-contacts.active
将返回您所需的内容。Db\u Expr工作正常-谢谢<代码>1-活动也是一个好主意-谢谢你+1。而
ABS
在这里是不必要的:
1-contacts.active
将返回您所需的内容。Db\u Expr工作正常-谢谢
1-active
也是一个好主意-谢谢
// Updated with zerkms' much simpler bit flipping logic
$data['active'] = new Zend_Db_Expr('1 - the.contacts.active');