Bir değeri bir Magento modelinde NULL olacak şekilde güncellemenin doğru yolu nedir?


12

Özel bir modelin değerini NULL olarak güncellemek için bir sorunla karşılaşıyorum.

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

Bu kod custom_value, veritabanındaki alanı güncelleştirmez ve veritabanı değeri NULL değerleri kabul eder (Veritabanında el ile NULL ayarı iyi çalışır).

DÜZENLEME: Tim, aşağıdaki kullanımda bahsedildiği gibi Zend_Db_Expr("NULL"), değeri null olarak ayarladığından, herkes bunun neden sadece bir php değil, Magento'da gerekli olduğunu açıklayabilir NULLmi?


sadece $ model-> setCustomValue ("") 'i deneyin;
Mufaddal

Tablo alanının türüdür doubleve ben gibi diğer sayısal türlerini denemiş decimalve yapıyor $model->setCustomValue("");olarak belirler değeri0
Invoke

7
Nasıl $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invoke, cevabınıza cevap vermek için, sadece "NULL" olarak ayarladıysanız Magento sadece değeri güncellemek istemediğinizi düşünecektir. Tim'in önerdiği gibi, ayarlamak istediğiniz veritabanı "NULL" olduğunu belirtmeniz gerekir.
Mayers

Teşekkürler @ mayers-dev, ilginç davranış. Değerin kendisini oluştururken amaçlanan güncellemeyi iptal etmeniz gerektiğinde bir get-cümlesi olarak tasarlandı sanırım.
çağırır

Yanıtlar:


2

Bu, çoğu zaman bir isset()vs array_key_exists()problemidir, bunu doğru gördüğümde.

Denemedim, ama kod okuma söyleyebilirim, değer burada kontrol edilir:

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

ve issetayarlanmış bir dizi anahtarında false döndürdüğünden NULL, değerinizin üzerine yazılır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.