Answers:
是的,可以使用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属性,则只能按属性名称(在示例中为“数字”)引用属性。
尽管上述方法仅由具有平面表的模型使用,但Zend_Db_Expr
也可以用于EAV属性,但处理方法为Varien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
。
但是您始终使用列名“ value
”:
$product->setNumber(new Zend_Db_Expr('value-1'));
您无需指定表别名,因为在保存期间,每个属性都将使用其自己的查询进行处理,因此“值”并不明确。
$collection->getSelect()
try ->setNumber(getNumber() - $number)
编辑:这将等效Set number = number - X
于mysql中X是$ number。
如果只想在MySQL中执行此操作,则只需要编写查询即可。
number=some_number
在sql查询中
UPDATE table SET number = number - 1