Odpowiedzi:
Najszybszym sposobem na to jest bezpośrednie uruchomienie tego zapytania.
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
Wszystko powinno ładnie się kaskadować. wartości atrybutów zostaną usunięte, relacje kategorii zostaną usunięte, upsells, crosssells i powiązane i tak dalej.
[EDYCJA]
Jest w tym pewien haczyk. Dzięki STW za zauważenie tego. Recenzje i oceny pozostaną sierotami, ponieważ nie ma dla nich klucza obcego do tabeli produktów.
->delete()
ale uniknie kodu wykrywającego zdarzenia. Na magazynie Magento wydaje się, że recenzje i oceny zostaną osierocone (nie zostaną usunięte, gdy powiązany jest z nimi produkt).
catalog_product_entity_*
tabele mają FK na entity_id
polu do catalog_product_entity.entity_id
pola. Powinny ładnie kaskadować.
Z całym szacunkiem dla Mariusa, ale proszę nie wchodzić w bezpośrednią interakcję z bazą danych, jeśli można jej w ogóle uniknąć. Być może powiązane tabele zostaną zaktualizowane automatycznie, jeśli Twoja wersja Magento i wszystkie rozszerzenia są wolne od błędów we właściwych miejscach. Ale jeśli nie są, takie rzeczy mogą zniszczyć Twoją witrynę.
Zamiast tego możesz użyć funkcji importu CSV Magento.
Po prostu wypisz swoje SKU w pliku, tak proste jak:
sku
ABC1
ABC2
ABC3
...itp. Następnie zapisz jako plik CSV.
Następnie w System> Import / Export> Import wybierz Typ jednostki: Produkty i Zachowanie importu: Usuń jednostki i zaimportuj ten plik. I to wszystko!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
Możesz to zrobić programowo. Utwórz skustodelete.csv z listą wszystkich skusów do usunięcia, a następnie oto kod, aby przejść dalej
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";
Brak kodu
W sekcji administracyjnej poniżej Manage Products
znajdziesz siatkę ze wszystkimi Twoimi produktami. Istnieje kolumna o nazwie SKU
. Tutaj możesz filtrować swoje produkty według wartości.
Następnie po przefiltrowaniu według SKU możesz użyć pól wyboru po lewej stronie, aby wybrać wszystkie elementy, które chcesz usunąć.
Zauważ, select all
który wybierze wszystkie elementy w całej siatce, a select visible
który wybierze tylko elementy na bieżącej stronie siatki.
Po wybraniu elementów, które chcesz, możesz użyć przycisku akcji masowej w prawym górnym rogu siatki i wybrać opcję usuwania.
Spowoduje to wyświetlenie monitu o upewnienie się, że chcesz usunąć te elementy. Po wybraniu opcji Tak dla tego wyskakującego okienka rozpocznie się usuwanie elementów. W zależności od ustawień indeksu po tym procesie może być konieczne ponowne zaindeksowanie.
Kevin S, możesz usunąć produkt według pliku csv. Postępuj zgodnie z krokiem kłębka
Krok 1 :
Utwórz plik csv i wklej skus, który chcesz usunąć z systemu. Podaj nazwę pliku jako skus.csv
Krok 2 :
Utwórz i zamień plik php w katalogu głównym. Następnie wklej następujący kod
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 />";
}
}
}
Uwaga: przed uruchomieniem tego kodu zaleciłem Ci wykonanie kopii zapasowej. Mam nadzieję, że to ci pomoże.
Ponieważ listy tabel
są kluczami obcymi katalogu_produktu_produktu.
Więc kiedy usuniesz rekord w katalogu katalog_produktu, niektóre rekordy powyższych tabel również zostaną usunięte.
Kod (zaimplementuj odpowiedź Mariusa) usuń wszystkie produkty, które mają identyfikator podmiotu <= 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);