Quelle est la bonne façon de mettre à jour une valeur pour qu'elle soit NULL sur un modèle Magento?

12

J'ai un problème pour obtenir la valeur d'un modèle personnalisé à mettre à jour vers NULL.

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

Ce code ne met pas à jour le champ custom_valuedans la base de données et la valeur de la base de données accepte les valeurs NULL (la définition manuelle de NULL dans la base de données fonctionne correctement).

EDIT: Comme Tim mentionne ci-dessous en utilisant Zend_Db_Expr("NULL")ne définit la valeur à null, quelqu'un pourrait-il expliquer pourquoi cela est requis dans Magento et pas simplement un php NULL?

Invoquer
la source
essayez simplement $ model-> setCustomValue ("");
Mufaddal
Le type du champ de table est doubleet j'ai essayé d'autres types numériques comme decimalet faire $model->setCustomValue("");définit la valeur sur0
Invoke
7
Et alors $null = new Zend_Db_Expr("NULL");?
user487772
2
@Invoke, pour répondre à votre réponse, si vous la définissez uniquement sur "NULL", Magento pensera seulement que vous ne voulez pas mettre à jour la valeur. Comme Tim l'a suggéré, vous devez spécifier que c'est la base de données "NULL" que vous souhaitez définir.
Mayers
Merci @ mayers-dev, comportement intéressant. Je suppose qu'il a été conçu comme une clause de sortie si vous devez annuler la mise à jour prévue tout en générant la valeur elle-même.
Invoquer le

Réponses:

2

C'est, comme si souvent, un problème isset()vs array_key_exists(), quand je vois cela correctement.

Je ne l'ai pas essayé, mais à la lecture du code, je dirais que la valeur est vérifiée ici:

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

et parce que issetreturn false sur une clé de tableau définie qui est NULL, votre valeur est remplacée.

Fabian Blechschmidt
la source