Existe uma maneira de usar o ORM simples do Magento ( Mage_Core_Model_Abstract
e Mage_Core_Model_Resource_Abstract
) para inserir linhas de modelo com uma chave primária específica?
Por exemplo, se eu executasse o seguinte em um sistema Magento vazio
Mage::getModel('core/website')->setData(array (
'website_id' => 2,
'code' => 'foo',
'name' => 'Main Website',
'sort_order' => 0,
'default_group_id' => 1,
'is_default' => 1,
));
Eu esperaria uma nova entrada na core_website
tabela. No entanto, Magento silenciosamente não faz nada aqui.
Ao pesquisar no recurso, parece que estou entrando em conflito com isso na classe de recursos do banco de dados
#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
}
Como o modelo possui um ID (ou seja, estou inserindo um ID específico) e como _useIsObjectNew
é codificado como falso, minha solicitação de salvamento é sempre roteada para o insert
caminho.
Existe uma maneira de forçar uma inserção com os modelos padrão do Magento? (sem reescrever / substituir classe).
Sim, o SQL bruto é uma opção, mas a funcionalidade do evento é perdida.
Respostas:
Então sim. ( edit :) O truque é usar uma
Mage_Core_Model_Abstract
subclasse que não possui o campo id que o gabarito de recursos espera:Mage::dispatchEvent('website_save_commit_after', [...])
é o único evento que vejo sendo consumido no núcleo. Pode ser tão simples quanto seguir comDe qualquer forma, preciso de um banho.
fonte
forsedSave
gist.github.com/astorm/5219357 . Isso funcionou para você ou foi apenas uma teoria?Varien_Object
classe de modelo diferente da classe diferente e depois chamar osave
método não depreciado do recurso ?Mage_Core_Model_Abstract
dicas de tipo para a matriz de dados.