2012-08-17 59 views
0

我的问题是完全相同的How to Set a Value to NULL when using Zend_Db调用Zend_Db的:: update()方法时设置的值设置为null,并插入()

然而,在这个问题给出的解决方案是不是为我工作。我的代码如下所示。在前端单击更新时,我在Model类上调用updateOper。里面updateOper,我调用另一个函数trimData()我第一次修剪所有空格,然后我还要检查,如果某些字段中empty''来了我想将它们设置为默认值或NULL值。因此我使用new Zend_db_expr('null')new Zend_db_expr('default')

的代码如下:

private function trimData(&$data) { 

    //Trim whitespace characters from incoming data. 
    foreach($data as $key => $val) 
    { 
     $data[$key] = trim($val); 
     if($data['notes'] == '') { 
      error_log("set notes to null/default value"); 
      $data['notes'] = new Zend_db_expr('DEFAULT'); 
     } 
    } 

} 

public function updateOper($data, $id) 
{ 
    $result = 0; 

    $tData = $this->trimData($data); 

    error_log("going to add data as ".print_r($data, true)); 
    $where = $this->getAdapter()->quoteInto('id = ?', $id); 
    $result = $this->update($data, $where); 

    return $result; 
} 

error_log语句打印$data array如下:

[id] => 10  
[name] => alpha 
[notes] => DEFAULT 

其结果是,该notes列具有值= '默认' 代替采摘表定义中给出的默认值。

我一直在试图找出什么是错的,但一直没能找到解决的办法。 我真的很感激你的帮助。

非常感谢!

+0

另一个观察:我添加的错误日志中trimData()函数将其设置为zend_db_expr后打印的纸币的值,并将其打印:expr之后的音符值为'Zend_Db_Expr对象 ( [_expression:保护] => DEFAULT ) 然而,当我在打印updateOper()函数的值相同的数据阵列的一部分它不显示它作为一个对象,但只是作为一个字符串DEFAULT。它需要被解释为对象,然后只有这个才能工作。但是我在这里错过了什么? – 2012-08-17 01:00:13

回答

1

您的$ data ['notes']正在更改为Zend_Db_Expr__toString()值,而不是保留实际对象。

也许基准堵塞的事情了。否则,您可能需要将表达式声明移至实际的更新查询中。

+0

谢谢RockyFord - 这是原因。我必须将'trimData(&$ data)'的函数签名更改为'trimData($ data)',然后将修改后的'$ data'数组返回到'updateOper'函数。现在它工作正常。 – 2012-08-20 18:57:30