ฉันต้องการลบแอตทริบิวต์ 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/เพื่อที่ว่ามันจะเป็นไปได้ที่จะเรียกสคริปต์ในเว็บเบราเซอร์: คุณชี้ให้ฉันในทิศทางที่ถูกต้องได้ไหม?