Czy istnieje sposób użycia prostego ORM Magento ( Mage_Core_Model_Abstract
i Mage_Core_Model_Resource_Abstract
) do wstawienia wierszy modelu za pomocą określonego klucza głównego?
Na przykład, jeśli uruchomiłem poniższe polecenie na pustym systemie Magento
Mage::getModel('core/website')->setData(array (
'website_id' => 2,
'code' => 'foo',
'name' => 'Main Website',
'sort_order' => 0,
'default_group_id' => 1,
'is_default' => 1,
));
Spodziewałbym się nowego wpisu w core_website
tabeli. Jednak Magento po cichu nic tu nie robi.
Zagłębiając się w zasób, wygląda na to, że popadam w błąd w klasie zasobów bazy danych
#File: app/code/core/Mage/Core/Model/Resource/Db/Abstract.php
if (!is_null($object->getId()) && (!$this->_useIsObjectNew || !$object->isObjectNew())) {
//update stuff here
}
else
{
//insert stuff here
}
Ponieważ model ma identyfikator (tzn. Wstawiam konkretny identyfikator), a ponieważ _useIsObjectNew
jest zakodowany na fałsz, moje żądanie zapisu jest zawsze kierowane do insert
ścieżki.
Czy istnieje sposób, aby wymusić wstawienie przy użyciu domyślnych modeli Magento? (bez przepisywania / zastępowania klas).
Tak, surowy SQL jest opcją, ale wtedy funkcjonalność zdarzenia zostaje utracona.