Який правильний спосіб оновити значення на NULL на моделі Magento?


12

У мене виникає проблема з отриманням значення користувацької моделі для оновлення до NULL.

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

Цей код не оновлює поле custom_valueв базі даних, а значення бази даних приймає значення NULL (Вручну встановлення NULL в базі даних працює нормально).

EDIT: Оскільки Тім зазначає нижче, використовуючи Zend_Db_Expr("NULL")значення, встановити нульове значення, чи може хто-небудь пояснити, чому це потрібно в Magento, а не просто php NULL?


просто спробуйте $ model-> setCustomValue ("");
Муфаддал

Тип поля таблиці є, doubleі я спробував інші числові типи, такі як decimalі робити, $model->setCustomValue("");встановлює значення на0
Викликати

7
Як щодо $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invoke, щоб відповісти на вашу відповідь, якщо ви встановите лише значення "NULL", Magento подумає лише, що ви не хочете оновлювати значення. Як запропонував Тім, вам потрібно вказати, що це база даних "NULL", яку ви хочете встановити.
Майєрс

Спасибі @ mayers-dev, цікава поведінка. Я думаю, що він був розроблений як застереження про вихід, якщо вам потрібно скасувати намічене оновлення, при цьому генеруючи саме значення.
Викликати

Відповіді:


2

Це, як це часто, isset()проти array_key_exists()проблеми, коли я це правильно бачу.

Я не пробував, але, читаючи код, я б сказав, значення перевіряється тут:

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

і тому що issetповертається false на наборі ключа масиву, який є NULL, ваше значення перезаписується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.