无法将空字符串保存到字段值中

时间:2014-01-19 15:37:16

标签: magento

我需要将NULL-field的值更改为空字符串(在sales_flat_order表中)。 我试过这段代码:

$orders = Mage::getModel('sales/order')->getCollection()
    ->addAttributeToFilter('created_at', array('to' => $endDate))
    ->addAttributeToFilter('status', array('eq' => Mage_Sales_Model_Order::STATE_COMPLETE));

foreach ($orders as $order) {
    $comment  = $order->getCustomerNote();
    if (is_null($comment)) {
        $order->setData('customer_note', '');
        try {
            $order->save();
        } catch (Exception $e){
            echo $e->getMessage();  exit;
        }
    }
}

但是在基础中我在这个字段中看到仍然是NULL值。 如果我将空字符串更改为任何非空字符串它可以正常工作。 如何将NULL值字段更新为空字符串?

感谢。

2 个答案:

答案 0 :(得分:0)

Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()中的空字符串设置为 null

case 'varchar':
case 'mediumtext':
case 'text':
case 'longtext':
    $value  = (string)$value;
    if ($column['NULLABLE'] && $value == '') {
        $value = null;
    }
    break;

要将列值重置为空字符串,请在资源模型中添加:

protected function _prepareDataForSave(Mage_Core_Model_Abstract $object)
{
    $data = parent::_prepareDataForSave($object);
    if ($object->getData('your_column_name') === '') {
        $data['your_column_name'] = '';
    }
    return $data;
}

答案 1 :(得分:-1)

我试过,这很正常。

              $order->setData('customer_note', new Zend_Db_Expr(''));
              try {
                       $order->save();
                } catch (Exception $e){
                      echo $e->getMessage();  exit;
                }