답변:
가장 빠른 방법은이 쿼리를 직접 실행하는 것입니다.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
모든 것이 멋지게 캐스케이드되어야합니다. 속성 값이 삭제되고 카테고리 관계가 삭제되고 업셀, 크로스 셀 등이 관련됩니다.
[편집]
이것에 대한 캐치가 있습니다. 이것을 발견 한 STW에게 감사합니다. 제품 표에 대한 외래 키가 없기 때문에 리뷰와 등급은 고아로 유지됩니다.
->delete()
만 이벤트를 수신하는 모든 코드를 피합니다. 재고 있음 Magento는 리뷰와 평가가 분리 된 것으로 보입니다 (관련된 제품이있을 때 삭제되지 않음).
catalog_product_entity_*
테이블에는 entity_id
필드 의 필드에 FK 가 catalog_product_entity.entity_id
있습니다. 그들은 캐스케이드해야합니다.
Marius를 존중하지만 데이터베이스를 피할 수 있다면 데이터베이스와 직접 상호 작용하지 마십시오. 어쩌면 젠토와 모든 확장 당신의 릴리스는 버그가없는 적절한 장소 모두있는 경우 관련 테이블이 자동으로 업데이트됩니다. 그러나 그렇지 않은 경우 이러한 종류의 사이트가 사이트를 손상시킬 수 있습니다.
대신 Magento의 자체 CSV 가져 오기 기능을 사용할 수 있습니다.
SKU를 파일에 다음과 같이 간단하게 나열하십시오.
sku
ABC1
ABC2
ABC3
...기타. 그런 다음 CSV 파일로 저장하십시오.
그런 다음 시스템> 가져 오기 / 내보내기> 가져 오기에서 엔티티 유형 : 제품 및 가져 오기 동작 : 엔티티 삭제를 선택하고이 파일을 가져 오십시오. 그리고 그게 다야!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
프로그래밍 방식으로 수행 할 수 있습니다. 삭제할 모든 skus를 나열하는 skustodelete.csv를 작성하고 그 다음에 계속 진행하는 코드가 있습니다.
require_once 'app/Mage.php';
Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
$skuAll = array();
$file_handle = fopen("skustodelete.csv", "r");
$catalog = Mage::getModel('catalog/product');
while (!feof($file_handle)) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
$product = $catalog->loadByAttribute('sku', $allSku);
try {
$product->delete();
echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
} catch (Exception $e) {
echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
}
}
echo "Finish Delete";
none code way
아래의 관리 섹션에서 Manage Products
모든 제품이 포함 된 그리드를 찾을 수 있습니다. 라는 열이 SKU
있습니다. 여기에서 값을 기준으로 제품을 필터링 할 수 있습니다.
그런 다음 SKU로 필터링 한 후 왼쪽의 확인란을 사용하여 삭제하려는 모든 항목을 선택할 수 있습니다.
통지 select all
전체 그리드의 모든 항목을 선택하고있는 select visible
경우에만 그리드의 현재 페이지의 항목을 선택할 것이다있다.
원하는 항목을 선택하면 그리드 오른쪽 상단에있는 대량 작업 단추를 사용하고 삭제 옵션을 선택할 수 있습니다.
그러면 해당 항목을 삭제할 것인지 묻는 메시지가 나타납니다. 이 팝업에서 예를 선택하면 항목 삭제가 진행됩니다. 색인 설정에 따라이 프로세스 후에 재 색인을 실행해야 할 수도 있습니다.
Kevin S, csv 파일로 제품을 삭제할 수 있습니다. 바로 다음 단계를 따르십시오
1 단계 :
csv 파일을 작성하고 시스템에서 삭제하려는 skus를지나십시오. 파일 이름을 skus.csv 로 지정하십시오.
2 단계 :
루트 디렉토리에 PHP 파일을 생성하고 교체하십시오. 그런 다음 다음 코드를지나
require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
}
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter(
'sku', array('in' => $allSku)
)
->load();
if(is_array($products))
{
foreach ($products as $key => $pId)
{
try
{
$product = Mage::getModel('catalog/product')->load($pId)->delete();
echo "successfully deleted product with ID: ". $pId ."<br />";
}
catch (Exception $e)
{
echo "Could not delete product with ID: ". $pId ."<br />";
}
}
}
참고 : 이 코드를 실행하기 전에 백업을 받아야합니다. 나는 그것이 당신을 도울 수 있기를 바랍니다.
목록 테이블 때문에
catalog_product_entity의 외래 키입니다.
따라서 catalog_product_entity에서 레코드를 삭제하면 위 테이블의 일부 레코드도 삭제됩니다.
코드 (구현 Marius의 답변)는 entity_id <= 18069 인 모든 제품을 삭제합니다.
$adapter = $setup->getConnection("catalog_write");
$where = array(
'entity_id <= ?' => '18069'
);
$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);
$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);