Eu preciso diminuir um valor com uma operação de banco de dados atômica , é possível usar modelos Magento?
setNumber($number)
funciona como number = $number
, mas eu preciso que ele seja diminuído na consulta SQL.
É possível no Magento ou eu mesmo tenho que escrever a consulta SQL?
model
sql
resource-model
tmm
fonte
fonte
setNumber(number)
tem algo comodecreaseBy(number)
Respostas:
Sim, é possível, usando
Zend_Db_Expr
:Para referência:
O método
Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
contém o seguinte código: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
":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.
fonte
$collection->getSelect()
Edit: Isso seria equivalente
Set number = number - X
no mysql, onde X é $ number.Se você quiser fazê-lo apenas no MySQL, basta escrever uma consulta.
fonte
number=some_number
na consulta sqlUPDATE table SET number = number - 1