Ich muss einen Wert mit einer atomaren Datenbankoperation dekrementieren. Ist es möglich, Magento-Modelle zu verwenden?
setNumber($number)
funktioniert wie number = $number
, aber ich muss es in SQL-Abfrage dekrementiert werden.
Ist es in Magento möglich oder muss ich die SQL-Abfrage selbst schreiben?
model
sql
resource-model
tmm
quelle
quelle
setNumber(number)
so etwas wiedecreaseBy(number)
Antworten:
Ja, es ist möglich mit
Zend_Db_Expr
:Als Referenz:
Die Methode
Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
enthält den folgenden Code:EAV-Modelle:
Beachten Sie, dass Sie das Attribut nur anhand seines Namens (im Beispiel "Nummer") referenzieren können, wenn es sich um eine echte Spalte der Haupttabelle handelt, nicht um ein EAV-Attribut.
Obwohl die oben genannte Methode nur von Modellen mit flachen Tabellen verwendet wird,
Zend_Db_Expr
kann sie auch für EAV-Attribute verwendet werdenVarien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.ABER Sie haben immer den Spaltennamen "
value
" verwendet:Sie müssen keinen Tabellenalias angeben, da jedes Attribut beim Speichern mit einer eigenen Abfrage verarbeitet wird, sodass "Wert" nicht mehrdeutig ist.
quelle
$collection->getSelect()
Bearbeiten: Dies entspricht
Set number = number - X
in MySQL, wobei X $ number ist.Wenn Sie dies nur in MySQL tun möchten, müssen Sie nur eine Abfrage schreiben.
quelle
number=some_number
in SQL-Abfrage seinUPDATE table SET number = number - 1