Как правильно изменить значение на NULL в модели Magento?

12

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

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

Этот код не обновляет поле custom_valueв базе данных, и значение базы данных принимает значения NULL (ручная установка NULL в базе данных работает нормально).

РЕДАКТИРОВАТЬ: Как Тим упоминает ниже, используя Zend_Db_Expr("NULL")значение устанавливает нулевое значение, кто-нибудь может объяснить, почему это требуется в Magento, а не просто php NULL?

Invoke
источник
просто попробуйте $ model-> setCustomValue ("");
Муфаддал
Тип поля таблицы - doubleи я пробовал другие числовые типы, такие как, decimalи, делая, $model->setCustomValue("");устанавливает значение в0
Invoke
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, то ваше значение перезаписывается.

Фабиан Блехшмидт
источник