Sim, é possível, usando Zend_Db_Expr
:
$object->setNumber(new Zend_Db_Expr('number-1'));
Para referência:
O método Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
contém o seguinte código:
if ($object->hasData($field)) {
$fieldValue = $object->getData($field);
if ($fieldValue instanceof Zend_Db_Expr) {
$data[$field] = $fieldValue;
} else {
... [normal value processing follows]
Modelos EAV:
Observe que você só pode fazer referência ao atributo por seu nome ("número" no exemplo) se for uma coluna real da tabela principal, não um atributo EAV.
Embora o método acima mencionado seja usado apenas por modelos com tabelas planas, também Zend_Db_Expr
pode ser usado para atributos EAV, o método que lida com isso é Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.
MAS você sempre usa o nome da coluna " value
":
$product->setNumber(new Zend_Db_Expr('value-1'));
Você não precisa especificar um alias de tabela porque, durante o salvamento, cada atributo é processado com sua própria consulta, portanto, "value" não é ambíguo.