Jaki jest prawidłowy sposób aktualizacji wartości na NULL w modelu Magento?

12

Mam problem z uzyskaniem wartości modelu niestandardowego do aktualizacji na NULL.

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

Ten kod nie aktualizuje pola custom_valuew bazie danych, a wartość bazy danych przyjmuje wartości NULL (ręczne ustawienie NULL w bazie danych działa dobrze).

EDYCJA: Jak Tim poniżej wspomina użycie Zend_Db_Expr("NULL")ustawia wartość na null, czy ktoś mógłby wyjaśnić, dlaczego jest to wymagane w Magento, a nie tylko php NULL?

Odwołać się
źródło
po prostu spróbuj $ model-> setCustomValue ("");
Mufaddal
Typem pola tabeli jest doublei próbowałem innych typów liczbowych, takich jak decimali robi, $model->setCustomValue("");ustawia wartość na0
Wywołaj
7
Jak o $null = new Zend_Db_Expr("NULL");?
user487772,
2
@Invoke, aby odpowiedzieć na twoją odpowiedź, jeśli ustawisz ją na „NULL” Magento pomyśli tylko, że nie chcesz aktualizować wartości. Jak zasugerował Tim, musisz określić, że chcesz ustawić bazę danych „NULL”.
Mayers
Dzięki @ mayers-dev, ciekawe zachowanie. Myślę, że został zaprojektowany jako klauzula get-out, jeśli musisz anulować zamierzoną aktualizację podczas generowania samej wartości.
Wywołaj

Odpowiedzi:

2

Jest to, jak często, problem isset()kontra array_key_exists(), kiedy widzę to poprawnie.

Nie próbowałem tego, ale z odczytu kodu powiedziałbym, że wartość jest sprawdzana tutaj:

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

a ponieważ issetzwraca wartość false dla zestawu kluczy tablicy, co oznacza NULL, że twoja wartość jest zastępowana.

Fabian Blechschmidt
źródło