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.