Apakah ada cara untuk menggunakan ORM sederhana Magento ( Mage_Core_Model_Abstract
dan Mage_Core_Model_Resource_Abstract
) untuk memasukkan baris model dengan kunci primer spesifik?
Misalnya, jika saya menjalankan yang berikut ini terhadap sistem Magento kosong
Mage::getModel('core/website')->setData(array (
'website_id' => 2,
'code' => 'foo',
'name' => 'Main Website',
'sort_order' => 0,
'default_group_id' => 1,
'is_default' => 1,
));
Saya harapkan entri baru di core_website
tabel. Namun, Magento diam-diam tidak melakukan apa pun di sini.
Menggali sumber daya, sepertinya saya tidak setuju dengan ini di kelas sumber daya database
#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
}
Karena model memiliki id (yaitu saya memasukkan ID tertentu), dan karena _useIsObjectNew
sulit dikodekan ke false, permintaan simpan saya selalu dialihkan ke insert
jalur.
Apakah ada cara untuk memaksa sisipan dengan model Magento default? (tanpa penulisan ulang / penggantian kelas).
Ya, SQL mentah adalah sebuah opsi, tetapi kemudian fungsionalitas acara hilang.
Jawaban:
Jadi ya. ( edit :) Caranya adalah dengan menggunakan
Mage_Core_Model_Abstract
subkelas yang tidak memiliki bidang id yang diharapkan oleh model sumber daya:Mage::dispatchEvent('website_save_commit_after', [...])
hanya acara yang saya lihat sedang dikonsumsi dalam inti. Ini bisa sesederhana mengikutiBagaimanapun, saya perlu mandi.
sumber
forsedSave
gist.github.com/astorm/5219357 . Apakah ini berhasil untuk Anda, atau hanya sebuah teori?Varien_Object
kelas model yang berbeda, dan kemudian memanggil metode sumber daya yang tidak disusutkansave
?Mage_Core_Model_Abstract
tipe mengisyaratkan untuk array data.