ฉันต้องการลบแอตทริบิวต์ EAV ที่ไม่ได้ใช้โดยตรงจากฐานข้อมูลก่อนที่ฉันจะย้ายร้านค้าของฉันอยู่ สามารถพบแอตทริบิวต์ได้ในeav_attribute
ตารางฉันสามารถลบแอตทริบิวต์จากตารางนี้ได้หรือไม่ ปลอดภัยไหม หรือฉันต้องแก้ไขตาราง EAV อื่น ๆ ด้วยหรือไม่
ฉันต้องการลบแอตทริบิวต์ EAV ที่ไม่ได้ใช้โดยตรงจากฐานข้อมูลก่อนที่ฉันจะย้ายร้านค้าของฉันอยู่ สามารถพบแอตทริบิวต์ได้ในeav_attribute
ตารางฉันสามารถลบแอตทริบิวต์จากตารางนี้ได้หรือไม่ ปลอดภัยไหม หรือฉันต้องแก้ไขตาราง EAV อื่น ๆ ด้วยหรือไม่
คำตอบ:
Mage_Eav_Model_Entity_Setup::removeAttribute()
ดู ใช้เวลาสองข้อโต้แย้งข้อแรกคือรหัสเอนทิตีและข้อที่สองคือรหัสแอททริบิวต์
แก้ไข -เพื่อเรียกใช้จากขอบเขตที่ไม่ได้ติดตั้ง:
<?php
include 'app/Mage.php';
Mage::app();
$setup = Mage::getResourceModel('catalog/setup','catalog_setup');
$setup->removeAttribute('catalog_product','attr_code');
catalog/setup
กับcustomer/setup
, catalog_setup
ด้วยcustomer_setup
และมีcatalog_product
customer
กฎข้อแรกของ Magento คือ: อย่าแก้ไขฐานข้อมูลโดยตรง
ฉันยอมรับว่าฉันทำผิดกฎนี้หลายครั้งดังนั้น ...
คุณสามารถลบคุณสมบัติได้eav_attribute
ข้อ จำกัด ที่ON DELETE CASCADE
ควรล้างส่วนที่เหลือของตาราง
แต่ฉันก็ยังคิดว่าคุณควรทำความสะอาด:
$attributeId = 55;
Mage::getModel('catalog/resource_eav_attribute')->load($attributeId)->delete();
ใช้เวลาไม่นานและคุณจะรู้สึกสงบสุขกับตัวเองเพราะคุณไม่ได้ผิดกฎ
มันไม่สำคัญว่าคุณเลือกวิธีการแบบใด แต่การสำรองฐานข้อมูลของคุณในทั้งสองกรณี
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "some_attr_code";
เป็นวิธีแก้ปัญหาการทำงานฉันใช้มันหลายครั้ง
โดยเฉพาะอย่างยิ่งถ้าคุณลบส่วนขยายและ Magento ยังคงต้องการเรียกใช้โมเดลแอตทริบิวต์ที่ไม่มีอยู่
$installer->removeAttribute('catalog_product', 'my_attribute1');
หรือ$installer->removeAttribute('catalog_category', 'my_attribute2');
แต่มีวิธีใช้รหัสนี้ในไฟล์แยกต่างหากหรือไม่? ฉันต้องการที่จะวางไฟล์ในโฟลเดอร์ราก (ที่วีโอไอพีindex.php
)example.com/delete_attributes.php/
เพื่อที่ว่ามันจะเป็นไปได้ที่จะเรียกสคริปต์ในเว็บเบราเซอร์: คุณชี้ให้ฉันในทิศทางที่ถูกต้องได้ไหม?