Я программист на magento, и я потерял несколько долгих минут, чтобы понять, почему свойство объекта не было сохранено в базе данных.
Давайте объясним, вот 3 фрагмента кода, которые я ожидал бы сделать то же самое:
Первый код
$order = Mage::getModel('sales/order')->load(1873);
$myInfo = 'important piece of information';
$order->getPayment()->setAdditionalInformation('my_info',$myInfo);
$order->getPayment()->save(); //No information in the database is saved
В базе данных нет значений.
Второй код
$order = Mage::getModel('sales/order')->load(1873);
$myInfo = 'important piece of information';
$payment = $order->getPayment();
$payment->setAdditionalInformation('my_info',$myInfo);
$payment->save(); //No information in the database is saved
В базе данных нет значений.
Третий код
$order = Mage::getModel('sales/order')->load(1873);
$myInfo = 'important piece of information';
$order->getPayment()->setAdditionalInformation('my_info',$myInfo)->save(); //YEAHHH ! It works ! I now have that in my database.
Наконец-то я понял!
Код из setAdditionalInformation
/**
* Additional information setter
* Updates data inside the 'additional_information' array
* or all 'additional_information' if key is data array
*
* @param string|array $key
* @param mixed $value
* @return Mage_Payment_Model_Info
* @throws Mage_Core_Exception
*/
public function setAdditionalInformation($key, $value = null)
{
if (is_object($value)) {
Mage::throwException(Mage::helper('sales')->__('Payment disallow storing objects.'));
}
$this->_initAdditionalInformation();
if (is_array($key) && is_null($value)) {
$this->_additionalInformation = $key;
} else {
$this->_additionalInformation[$key] = $value;
}
return $this->setData('additional_information', $this->_additionalInformation);
}
примечание: финальная setData () всегда возвращает $ this
Вопрос, почему?
Мне кажется, я забыл некоторые особенности работы PHP, особенно для первого кода. Я бы понял, что это не работает из-за некоторого объема памяти с PHP.
Но два других куска кода, почему это не работает?
Спасибо,
Гуго.