วิธีที่ถูกต้องในการอัพเดทค่าให้เป็น NULL ในรุ่น Magento คืออะไร?


12

ฉันมีปัญหาในการรับค่าของโมเดลที่กำหนดเองเพื่ออัปเดตเป็น NULL

$model = Mage::getModel('custom/model')->load($id);
$model->setCustomValue(NULL);
$model->save();

รหัสนี้ไม่ปรับปรุงฟิลด์custom_valueในฐานข้อมูลและค่าฐานข้อมูลยอมรับค่า NULL (การตั้งค่า NULL ด้วยตนเองในฐานข้อมูลทำงานได้ดี)

แก้ไข: ตามที่ Tim กล่าวถึงการใช้งานด้านล่างนี้Zend_Db_Expr("NULL")จะทำให้ค่าเป็นโมฆะทุกคนสามารถอธิบายได้ว่าทำไมสิ่งนี้จึงเป็นสิ่งจำเป็นใน Magento และไม่ใช่แค่ php เพียงอย่างเดียวNULL?


เพียงลอง $ model-> setCustomValue ("");
Mufaddal

ประเภทของเขตข้อมูลตารางคือdoubleและฉันได้ลองประเภทตัวเลขอื่น ๆ เช่นdecimalและการทำ$model->setCustomValue("");ตั้งค่าเป็น0
Invoke

7
แล้วไง$null = new Zend_Db_Expr("NULL");ล่ะ
user487772

2
@Invoke เพื่อตอบคำตอบของคุณหากคุณตั้งเป็น "NULL" Magento จะคิดว่าคุณไม่ต้องการอัปเดตค่า ตามที่ Tim แนะนำคุณต้องระบุว่าเป็นฐานข้อมูล "NULL" ที่คุณต้องการตั้งค่า
Mayers

ขอบคุณ @ mayers-dev พฤติกรรมที่น่าสนใจ ฉันเดาว่ามันถูกออกแบบมาให้เป็นส่วนหนึ่งของประโยคที่คุณต้องยกเลิกการปรับปรุงที่ตั้งใจไว้ในขณะที่สร้างมูลค่าตัวเอง
วิงวอน

คำตอบ:


2

นี้จะเป็นเช่นนั้นมักจะเป็นisset()VS array_key_exists()ปัญหาเมื่อฉันเห็นนี้ได้อย่างถูกต้อง

ฉันไม่ได้ลอง แต่จากการอ่านรหัสฉันจะบอกว่ามีการตรวจสอบค่าที่นี่:

\Mage_Eav_Model_Entity_Abstract::_saveAttribute
if (!isset($this->_attributeValuesToSave[$table])) {
    $this->_attributeValuesToSave[$table] = array();
}

และเนื่องจากissetreturn false บนชุดอาร์เรย์คีย์ซึ่งเป็นNULLค่าของคุณจะถูกเขียนทับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.