Apa cara yang benar untuk memperbarui nilai menjadi NULL pada model Magento?


12

Saya mengalami masalah dalam mendapatkan nilai model khusus untuk diperbarui ke NULL.

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

Kode ini tidak memperbarui bidang custom_valuedalam database, dan nilai database menerima nilai NULL (Secara manual mengatur NULL dalam database berfungsi dengan baik).

EDIT: Seperti Tim menyebutkan menggunakan Zend_Db_Expr("NULL")tidak menetapkan nilai ke nol, adakah yang bisa menjelaskan mengapa ini diperlukan di Magento dan bukan hanya sekedar php NULL?


coba saja $ model-> setCustomValue ("");
Mufaddal

Jenis bidang tabel adalah doubledan saya telah mencoba jenis numerik lainnya seperti decimaldan melakukan $model->setCustomValue("");set nilainya0
Invoke

7
Bagaimana dengan $null = new Zend_Db_Expr("NULL");?
user487772

2
@Invoke, untuk membalas jawaban Anda, jika Anda hanya mengaturnya ke "NULL" Magento hanya akan berpikir Anda tidak ingin memperbarui nilai. Seperti yang disarankan Tim, Anda harus menentukan bahwa itu adalah database "NULL" yang ingin Anda atur.
Mayers

Terima kasih @ mayers-dev, perilaku yang menarik. Saya kira itu dirancang sebagai klausa keluar-keluar jika Anda harus membatalkan pembaruan yang dimaksud sambil menghasilkan nilai itu sendiri.
Aktifkan

Jawaban:


2

Ini, seperti yang sering menjadi masalah isset()vs array_key_exists(), ketika saya melihat ini dengan benar.

Saya tidak mencobanya, tetapi dari membaca kode saya akan mengatakan, nilainya diperiksa di sini:

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

dan karena issetmengembalikan false pada kunci array yang ditetapkan NULL, nilai Anda ditimpa.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.