데이터베이스에서 사용자 정의 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/setupcustomer/setup, catalog_setupcustomer_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.