Qual é a maneira correta de atualizar um valor para ser NULL em um modelo Magento?

12

Estou tendo um problema ao obter o valor de um modelo personalizado para atualizar para NULL.

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

Esse código não atualiza o campo custom_valueno banco de dados e o valor do banco de dados aceita valores NULL (a configuração manual de NULL no banco de dados funciona bem).

EDIT: Como Tim menciona abaixo o uso Zend_Db_Expr("NULL")define o valor como nulo, alguém poderia explicar por que isso é necessário no Magento e não apenas um php NULL?

Invocar
fonte
tente $ model-> setCustomValue ("");
Mufaddal
O tipo do campo da tabela é doublee eu tentei outros tipos numéricos como decimale doing $model->setCustomValue("");define o valor para0
Invoque
7
Que tal $null = new Zend_Db_Expr("NULL");?
precisa saber é o seguinte
2
@ Invoque, para responder à sua resposta, se você o definir apenas como "NULL", o Magento pensará que você não deseja atualizar o valor. Como Tim sugeriu, você precisa especificar que é o banco de dados "NULL" que deseja definir.
Mayers
Obrigado @ mayers-dev, comportamento interessante. Eu acho que ele foi projetado como uma cláusula de saída, caso você precise cancelar a atualização pretendida enquanto gera o valor em si.
Invoque

Respostas:

2

Isso é, como tantas vezes um problema isset()vs array_key_exists(), quando vejo isso corretamente.

Eu não tentei, mas da leitura de código eu diria que o valor é verificado aqui:

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

e como issetretorna false em uma chave de matriz definida NULL, seu valor é substituído.

Fabian Blechschmidt
fonte