¿Hay alguna manera de usar el ORM simple de Magento ( Mage_Core_Model_Abstracty Mage_Core_Model_Resource_Abstract) para insertar filas de modelo con una clave primaria específica?
Por ejemplo, si ejecuté lo siguiente contra un sistema Magento vacío
Mage::getModel('core/website')->setData(array (
'website_id' => 2,
'code' => 'foo',
'name' => 'Main Website',
'sort_order' => 0,
'default_group_id' => 1,
'is_default' => 1,
));
Esperaría una nueva entrada en la core_websitetabla. Sin embargo, Magento silenciosamente no hace nada aquí.
Excavando en el recurso, parece que estoy cayendo en conflicto con esto en la clase de recurso de base de datos
#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
}
Debido a que el modelo tiene una identificación (es decir, estoy insertando una identificación específica), y debido a que _useIsObjectNewestá codificado como falso, mi solicitud de guardar siempre se enruta a la insertruta.
¿Hay alguna forma de forzar una inserción con los modelos Magento predeterminados? (sin una reescritura / reemplazo de clase).
Sí, el SQL sin formato es una opción, pero luego se pierde la funcionalidad del evento.

Respuestas:
Así que sí. ( editar :) El truco consiste en utilizar una
Mage_Core_Model_Abstractsubclase que no tenga el campo id que el modelo de recurso espera:Mage::dispatchEvent('website_save_commit_after', [...])es el único evento que veo que se consume en el núcleo Podría ser tan simple como seguir conEn cualquier caso, necesito una ducha.
fuente
forsedSavegist.github.com/astorm/5219357 . ¿Funcionó esto para usted o fue solo una teoría?Varien_Objectclase de modelo en lugar de otra diferente y luego llamar alsavemétodo no depreciado del recurso ?Mage_Core_Model_Abstractsugerencias de tipo para la matriz de datos.