ลบแอตทริบิวต์ EAV ที่กำหนดเองออกจากฐานข้อมูล


28

ฉันต้องการลบแอตทริบิวต์ EAV ที่ไม่ได้ใช้โดยตรงจากฐานข้อมูลก่อนที่ฉันจะย้ายร้านค้าของฉันอยู่ สามารถพบแอตทริบิวต์ได้ในeav_attributeตารางฉันสามารถลบแอตทริบิวต์จากตารางนี้ได้หรือไม่ ปลอดภัยไหม หรือฉันต้องแก้ไขตาราง EAV อื่น ๆ ด้วยหรือไม่

คำตอบ:


39

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');

1
ขอขอบคุณ ฉันเข้าใจวิธีใช้งานในสคริปต์การตั้งค่าของโมดูล: $installer->removeAttribute('catalog_product', 'my_attribute1');หรือ$installer->removeAttribute('catalog_category', 'my_attribute2'); แต่มีวิธีใช้รหัสนี้ในไฟล์แยกต่างหากหรือไม่? ฉันต้องการที่จะวางไฟล์ในโฟลเดอร์ราก (ที่วีโอไอพีindex.php) example.com/delete_attributes.php/เพื่อที่ว่ามันจะเป็นไปได้ที่จะเรียกสคริปต์ในเว็บเบราเซอร์: คุณชี้ให้ฉันในทิศทางที่ถูกต้องได้ไหม?
zitix

อัปเดตคำตอบของฉัน
benmarks

ฉันต้องเปลี่ยนรหัสใดในการลบแอตทริบิวต์ลูกค้าที่กำหนดเอง
shasi kanth

1
@shasikanth - มันจริงๆเป็นคำถามที่แยกกัน แต่แลกcatalog/setupกับcustomer/setup, catalog_setupด้วยcustomer_setupและมีcatalog_product customer
benmarks

12

กฎข้อแรกของ Magento คือ: อย่าแก้ไขฐานข้อมูลโดยตรง
ฉันยอมรับว่าฉันทำผิดกฎนี้หลายครั้งดังนั้น ...
คุณสามารถลบคุณสมบัติได้eav_attributeข้อ จำกัด ที่ON DELETE CASCADEควรล้างส่วนที่เหลือของตาราง
แต่ฉันก็ยังคิดว่าคุณควรทำความสะอาด:

$attributeId = 55;
Mage::getModel('catalog/resource_eav_attribute')->load($attributeId)->delete();

ใช้เวลาไม่นานและคุณจะรู้สึกสงบสุขกับตัวเองเพราะคุณไม่ได้ผิดกฎ
มันไม่สำคัญว่าคุณเลือกวิธีการแบบใด แต่การสำรองฐานข้อมูลของคุณในทั้งสองกรณี


3
ฉันพยายามหลีกเลี่ยงการแก้ไขฐานข้อมูลเสมอ แต่มันเร็วกว่ามากในการทำเช่นนี้ :) และในครั้งนี้ใช้สำหรับการทดสอบเท่านั้น (ไม่ใช่สำหรับไซต์ที่ใช้งานจริง) ดังนั้นพอแบบสอบถามนี้เพื่อกำจัดของแอตทริบิวต์หรือฉันไม่ต้องทำอะไรเพิ่มเติมได้ที่:DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
zitix

นี่ควรเป็น eoungh ตรวจสอบให้แน่ใจว่าไม่มีแอตทริบิวต์ 2 รายการที่มีรหัสเดียวกันสำหรับเอนทิตีที่แตกต่างกัน
Marius

3

DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "some_attr_code";

เป็นวิธีแก้ปัญหาการทำงานฉันใช้มันหลายครั้ง

โดยเฉพาะอย่างยิ่งถ้าคุณลบส่วนขยายและ Magento ยังคงต้องการเรียกใช้โมเดลแอตทริบิวต์ที่ไม่มีอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.