Wie kann ein Wert auf einem Magento-Modell korrekt auf NULL aktualisiert werden?


12

Ich habe ein Problem damit, den Wert eines benutzerdefinierten Modells auf NULL zu aktualisieren.

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

Dieser Code aktualisiert das Feld custom_valuein der Datenbank nicht und der Datenbankwert akzeptiert NULL-Werte (das manuelle Festlegen von NULL in der Datenbank funktioniert einwandfrei).

BEARBEITEN: Wie Tim unten erwähnt, Zend_Db_Expr("NULL")setzt using den Wert auf null. Kann jemand erklären, warum dies in Magento erforderlich ist und nicht nur ein PHP NULL?


versuchen Sie einfach $ model-> setCustomValue ("");
Mufaddal

Der Typ des Tabellenfeldes ist doubleund ich habe versucht, andere numerische Typen wie decimalund Doing $model->setCustomValue("");setzt den Wert auf0
Invoke

7
Wie wäre es $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invoke, um auf Ihre Antwort zu antworten, wenn Sie sie nur auf "NULL" setzen, wird Magento nur denken, dass Sie den Wert nicht aktualisieren möchten. Wie Tim vorgeschlagen hat, müssen Sie angeben, dass Sie die Datenbank "NULL" festlegen möchten.
Mayers

Danke @ mayers-dev, interessantes Verhalten. Ich denke, es wurde als Get-Out-Klausel konzipiert, falls Sie das beabsichtigte Update abbrechen müssen, während Sie den Wert selbst generieren.
Rufen Sie den

Antworten:


2

Dies ist, wie so oft ein isset()vs- array_key_exists()Problem, wenn ich das richtig sehe.

Ich habe es nicht ausprobiert, aber beim Lesen des Codes würde ich sagen, dass der Wert hier überprüft wird:

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

und weil issetbei einem festgelegten Array-Schlüssel false zurückgegeben wird NULL, wird Ihr Wert überschrieben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.