Мне нужно уменьшить значение с помощью атомарной операции с базой данных , возможно ли использование моделей Magento?
setNumber($number)
работает как number = $number
, но мне нужно, чтобы это было уменьшено в запросе SQL.
Возможно ли это в Magento или мне нужно самому написать SQL-запрос?
setNumber(number)
имеет что-то вродеdecreaseBy(number)
Ответы:
Да, это возможно, используя
Zend_Db_Expr
:Для справки:
Метод
Mage_Core_Model_Resource_Abstract::_prepareDataForSave()
содержит следующий код:Модели EAV:
Обратите внимание, что вы можете ссылаться на атрибут только по имени (в данном примере это «число»), если это реальный столбец главной таблицы, а не атрибут EAV.
Хотя вышеупомянутый метод используется только в моделях с плоскими таблицами, он
Zend_Db_Expr
может быть использован и для атрибутов EAV, метод, который его обрабатываетVarien_Db_Adapter_Pdo_Mysql::prepareColumnValue()
.НО вы всегда должны использовать имя столбца "
value
":Вам не нужно указывать псевдоним таблицы, потому что при сохранении каждый атрибут обрабатывается с помощью собственного запроса, поэтому «значение» не является неоднозначным.
источник
$collection->getSelect()
Изменить: Это будет эквивалентно
Set number = number - X
в MySQL, где X является $ число.Если вы хотите сделать это только в MySQL, вам просто нужно написать запрос.
источник
number=some_number
в sql запросеUPDATE table SET number = number - 1