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?


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.