Có, nó có thể, sử dụng Zend_Db_Expr
:
$object->setNumber(new Zend_Db_Expr('number-1'));
Để tham khảo:
Phương thức Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
chứa mã sau đây:
if ($object->hasData($field)) {
$fieldValue = $object->getData($field);
if ($fieldValue instanceof Zend_Db_Expr) {
$data[$field] = $fieldValue;
} else {
... [normal value processing follows]
Mô hình EAV:
Lưu ý rằng bạn chỉ có thể tham chiếu thuộc tính theo tên của nó ("số" trong ví dụ) nếu đó là cột thực của bảng chính, không phải là thuộc tính EAV.
Mặc dù phương thức nêu trên chỉ được sử dụng bởi các mô hình có bảng phẳng, nhưng Zend_Db_Expr
cũng có thể được sử dụng cho các thuộc tính EAV, nhưng phương thức xử lý nó là Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.
NHƯNG bạn luôn luôn sử dụng tên cột " value
":
$product->setNumber(new Zend_Db_Expr('value-1'));
Bạn không cần chỉ định bí danh bảng vì trong quá trình lưu, mỗi thuộc tính được xử lý bằng truy vấn riêng, vì vậy "giá trị" không mơ hồ.