Necesito disminuir un valor con una operación de base de datos atómica , ¿es posible usar modelos Magento?
setNumber($number)
funciona como number = $number
, pero necesito que se disminuya en la consulta SQL.
¿Es posible en Magento o tengo que escribir yo mismo la consulta SQL?
model
sql
resource-model
tmm
fuente
fuente
setNumber(number)
tener algo comodecreaseBy(number)
Respuestas:
Sí, es posible, usando
Zend_Db_Expr
:Para referencia:
El método
Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
contiene el siguiente código: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 esVarien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.PERO siempre has usado el nombre de columna "
value
":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.
fuente
$collection->getSelect()
Editar: Esto sería equivalente a
Set number = number - X
en mysql donde X es $ número.Si desea hacerlo solo en MySQL, solo necesita escribir una consulta.
fuente
number=some_number
en consulta SQLUPDATE table SET number = number - 1