Sí, es posible, usando Zend_Db_Expr
:
$object->setNumber(new Zend_Db_Expr('number-1'));
Para referencia:
El método Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
contiene el siguiente 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:
Tenga en cuenta que solo puede hacer referencia al atributo por su nombre ("número" en el ejemplo) si es una columna real de la tabla principal, no un atributo EAV.
Aunque el método mencionado anteriormente solo se usa en modelos con tablas planas, también Zend_Db_Expr
se puede usar para atributos EAV, el método que lo maneja es Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.
PERO siempre has usado el nombre de columna " value
":
$product->setNumber(new Zend_Db_Expr('value-1'));
No necesita especificar un alias de tabla porque durante el guardado cada atributo se procesa con su propia consulta, por lo que el "valor" no es ambiguo.