Qual è il modo corretto di aggiornare un valore per essere NULL su un modello Magento?


12

Sto riscontrando un problema nell'ottenere il valore di un modello personalizzato da aggiornare a NULL.

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

Questo codice non aggiorna il campo custom_valuenel database e il valore del database accetta i valori NULL (L'impostazione manuale di NULL nel database funziona correttamente).

EDIT: Come Tim menziona di seguito usando Zend_Db_Expr("NULL")imposta il valore su null, qualcuno potrebbe spiegare perché questo è richiesto in Magento e non semplicemente un php NULL?


basta provare $ model-> setCustomValue ("");
Mufaddal,

Il tipo di campo tabella è doublee ho provato altri tipi numerici come decimale facendo $model->setCustomValue("");imposta il valore su0
Invoke

7
Che ne dici $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invoke, per rispondere alla tua risposta, se la imposti solo su "NULL" Magento penserà solo che non vuoi aggiornare il valore. Come suggerito da Tim, è necessario specificare che si desidera impostare il database "NULL".
Mayers,

Grazie @ mayers-dev, comportamento interessante. Immagino che sia stato progettato come una clausola get-out nel caso in cui fosse necessario annullare l'aggiornamento previsto durante la generazione del valore stesso.
Invoca il

Risposte:


2

Questo è, come spesso un problema isset()vs array_key_exists(), quando lo vedo correttamente.

Non l'ho provato, ma dalla lettura del codice direi che il valore è verificato qui:

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

e poiché issetrestituisce false su una chiave array impostata NULL, ovvero il valore viene sovrascritto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.