데이터베이스에서 사용자 정의 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웹 브라우저에서 스크립트를 호출 할 수 있도록 파일을 루트 폴더 (Magento 's ) 에 배치하고 싶습니다 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();

오래 걸리지 않아야하며 규칙을 어 기지 않았기 때문에 자신과 평화롭게 지낼 것입니다.
어떤 방법을 선택하든 중요하지 않지만 두 경우 모두 DB 백업이 필요합니다.


3
나는 항상 데이터베이스 편집을 피하려고 노력하지만이 방법으로 수행하는 것이 훨씬 빠릅니다 :) 이번에는 테스트 전용입니다 (생산 사이트가 아님). 따라서이 쿼리는 속성을 제거하기에 충분합니까, 아니면 추가 작업이 필요합니까?DELETE FROM eav_attribute WHERE eav_attribute.attribute_code = "my_attribute";
— zitix

이 말이되어야합니다. 다른 엔티티에 대해 동일한 코드를 가진 두 개의 속성이 없는지 확인하십시오.
— Marius

3

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

A는 작업 솔루션, 나는 많은 시간을 사용했다.

특히 확장을 제거하고 Magento가 여전히 존재하지 않는 속성 모델을 호출하려는 경우

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.