2014-01-19 81 views
0

我需要將NULL字段的值更改爲空字符串(在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值字段更新爲空字符串?

謝謝。

+0

我假設你已經檢查過sales_flat_order表中有一個名爲customer_note的列嗎?這不是一個默認列,這就是爲什麼我問。如果你總是需要它是一個空字符串,爲什麼不只是改變表上的列定義爲空字符串作爲默認而不是NULL'ALTER TABLE sales_flat_order ALTER COLUMN customer_note SET DEFAULT'';'然後手動更新您現有的記錄帶UPDATE的數據庫sales_flat_order SET customer_note =''WHERE customer_note = NULL AND state ='complete';'。調用保存時,該值實際上是否保存在數據庫中? – Ashley

+0

是的,「customer_note」是自己的專欄。它需要默認的NULL值。在前端,我提出了一個案例:如果customer_note爲null,則放置textarea,否則,如果它不是空字符串,則顯示它。最後,我決定我的問題與derict sql(在cron作業中):Mage :: getSingleton('core/resource') - > getConnection('core_write') - > query(..)。我只是感到驚訝,Magento不允許更新空值來清空字符串:( – Dzurillo

回答

-1

我試過了,這很正常。

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

空字符串設定爲Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()

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; 
} 
相關問題