Php 使用交换值表达式更新zend框架
我尝试进行通用更新/交换,它将始终切换活动状态。在SQL中很简单: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( )-&
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');