¿Cuál es la forma correcta de actualizar un valor para que sea NULL en un modelo de Magento?


12

Tengo un problema para obtener el valor de un modelo personalizado para actualizar a NULL.

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

Este código no actualiza el campo custom_valueen la base de datos, y el valor de la base de datos acepta valores NULL (configurar NULL manualmente en la base de datos funciona bien).

EDITAR: Como Tim menciona a continuación, el uso Zend_Db_Expr("NULL")establece el valor en nulo, ¿alguien podría explicar por qué esto se requiere en Magento y no simplemente un php NULL?


solo prueba $ model-> setCustomValue ("");
Mufaddal

El tipo del campo de la tabla es doubley he probado otros tipos numéricos como decimaly haciendo $model->setCustomValue("");establece el valor en0
Invocar el

77
¿Qué tal $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invocar, para responder a su respuesta, si solo lo configura en "NULL", Magento solo pensará que no desea actualizar el valor. Como Tim sugirió, debe especificar que es la base de datos "NULL" que desea establecer.
Mayers

Gracias @ mayers-dev, comportamiento interesante. Supongo que fue diseñado como una cláusula de salida si necesita cancelar la actualización prevista mientras genera el valor en sí.
Invocar el

Respuestas:


2

Esto es, como a menudo un problema isset()vs array_key_exists(), cuando veo esto correctamente.

No lo intenté, pero desde la lectura del código diría que el valor se verifica aquí:

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

y debido a que issetdevuelve false en una clave de matriz establecida que es NULL, su valor se sobrescribe.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.