มีวิธีใช้ ORM ( Mage_Core_Model_Abstract
และMage_Core_Model_Resource_Abstract
) แบบง่ายของ Magento เพื่อแทรกแถวแบบจำลองด้วยคีย์หลักที่เฉพาะเจาะจงหรือไม่
ตัวอย่างเช่นถ้าฉันวิ่งระบบต่อไปนี้กับระบบ 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,
));
ฉันคาดว่าจะมีรายการใหม่ในcore_website
ตาราง อย่างไรก็ตามวีโอไอพีไม่ได้ทำอะไรที่นี่อย่างเงียบ ๆ
ขุดลงไปในทรัพยากรดูเหมือนว่าฉันตกหลุมนี้ในชั้นเรียนทรัพยากรฐานข้อมูล
#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
}
เนื่องจากตัวแบบมีรหัส (เช่นฉันใส่รหัสเฉพาะ) และเนื่องจาก_useIsObjectNew
รหัสยากที่จะเป็นเท็จคำขอบันทึกของฉันจึงถูกส่งไปยังinsert
เส้นทางเสมอ
มีวิธีบังคับให้แทรกด้วยรุ่น Magento เริ่มต้นหรือไม่? (โดยไม่ต้องเขียน / เปลี่ยนคลาส)
ใช่ SQL ดิบเป็นตัวเลือก แต่ฟังก์ชั่นเหตุการณ์จะหายไป