Cách chính xác để cập nhật giá trị thành NULL trên mô hình Magento là gì?


12

Tôi gặp sự cố khi nhận giá trị của mô hình tùy chỉnh để cập nhật lên NULL.

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

Mã này không cập nhật trường custom_valuetrong cơ sở dữ liệu và giá trị cơ sở dữ liệu chấp nhận giá trị NULL (Cài đặt thủ công NULL trong cơ sở dữ liệu hoạt động tốt).

EDIT: Như Tim đề cập bên dưới bằng cách sử dụng Zend_Db_Expr("NULL")không đặt giá trị thành null, bất kỳ ai cũng có thể giải thích tại sao điều này là bắt buộc trong Magento và không chỉ đơn giản là một php NULL?


chỉ cần thử $ model-> setCustomValue ("");
Mufaddal

Loại trường của bảng là doublevà tôi đã thử các kiểu số khác như decimalvà thực hiện $model->setCustomValue("");đặt giá trị thành0
Gọi

7
Thế còn $null = new Zend_Db_Expr("NULL");?
dùng487772

2
@Invoke, để trả lời câu trả lời của bạn, nếu bạn chỉ đặt nó thành "NULL" Magento sẽ chỉ nghĩ rằng bạn không muốn cập nhật giá trị. Như Tim đã đề xuất, bạn cần xác định rằng đó là cơ sở dữ liệu "NULL" mà bạn muốn đặt.
Mayers

Cảm ơn @ mayers-dev, hành vi thú vị. Tôi đoán nó được thiết kế như một mệnh đề get-out nên bạn cần hủy bản cập nhật dự định trong khi tự tạo giá trị.
Gọi

Câu trả lời:


2

Đây là, như thường là một vấn đề isset()vs array_key_exists(), khi tôi thấy điều này chính xác.

Tôi đã không thử nó, nhưng từ việc đọc mã tôi sẽ nói, giá trị được kiểm tra ở đây:

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

và bởi vì issettrả về false trên một khóa mảng được đặt NULL, giá trị của bạn bị ghi đè.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.