Да, это возможно, используя Zend_Db_Expr
:
$object->setNumber(new Zend_Db_Expr('number-1'));
Для справки:
Метод Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
содержит следующий код:
if ($object->hasData($field)) {
$fieldValue = $object->getData($field);
if ($fieldValue instanceof Zend_Db_Expr) {
$data[$field] = $fieldValue;
} else {
... [normal value processing follows]
Модели EAV:
Обратите внимание, что вы можете ссылаться на атрибут только по имени (в данном примере это «число»), если это реальный столбец главной таблицы, а не атрибут EAV.
Хотя вышеупомянутый метод используется только в моделях с плоскими таблицами, он Zend_Db_Expr
может быть использован и для атрибутов EAV, метод, который его обрабатывает Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.
НО вы всегда должны использовать имя столбца " value
":
$product->setNumber(new Zend_Db_Expr('value-1'));
Вам не нужно указывать псевдоним таблицы, потому что при сохранении каждый атрибут обрабатывается с помощью собственного запроса, поэтому «значение» не является неоднозначным.